home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / amigaos4_only / sonstiges / gcc-2.95.3.patch next >
Text File  |  2004-08-03  |  1MB  |  36,263 lines

  1. diff -urNEBb gcc-2.95.3-orig/config.guess gcc-2.95.3/config.guess
  2. --- gcc-2.95.3-orig/config.guess    2000-03-08 05:52:57.000000000 +0100
  3. +++ gcc-2.95.3/config.guess    2003-12-02 17:50:54.000000000 +0100
  4. @@ -1,7 +1,10 @@
  5.  #! /bin/sh
  6.  # Attempt to guess a canonical system name.
  7. -#   Copyright (C) 1992, 93, 94, 95, 96, 97, 1998, 1999 Free Software Foundation, Inc.
  8. -#
  9. +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  10. +#   2000, 2001, 2002 Free Software Foundation, Inc.
  11. +
  12. +timestamp='2002-05-22'
  13. +
  14.  # This file is free software; you can redistribute it and/or modify it
  15.  # under the terms of the GNU General Public License as published by
  16.  # the Free Software Foundation; either version 2 of the License, or
  17. @@ -21,22 +24,97 @@
  18.  # configuration script generated by Autoconf, you may include it under
  19.  # the same distribution terms that you use for the rest of that program.
  20.  
  21. -# Written by Per Bothner <bothner@cygnus.com>.
  22. -# The master version of this file is at the FSF in /home/gd/gnu/lib.
  23. +# Originally written by Per Bothner <per@bothner.com>.
  24. +# Please send patches to <config-patches@gnu.org>.  Submit a context
  25. +# diff and a properly formatted ChangeLog entry.
  26.  #
  27.  # This script attempts to guess a canonical system name similar to
  28.  # config.sub.  If it succeeds, it prints the system name on stdout, and
  29.  # exits with 0.  Otherwise, it exits with 1.
  30.  #
  31.  # The plan is that this can be called by configure scripts if you
  32. -# don't specify an explicit system type (host/target name).
  33. -#
  34. -# Only a few systems have been added to this list; please add others
  35. -# (but try to keep the structure clean).
  36. -#
  37. +# don't specify an explicit build system type.
  38. +
  39. +me=`echo "$0" | sed -e 's,.*/,,'`
  40. +
  41. +usage="\
  42. +Usage: $0 [OPTION]
  43. +
  44. +Output the configuration name of the system \`$me' is run on.
  45. +
  46. +Operation modes:
  47. +  -h, --help         print this help, then exit
  48. +  -t, --time-stamp   print date of last modification, then exit
  49. +  -v, --version      print version number, then exit
  50. +
  51. +Report bugs and patches to <config-patches@gnu.org>."
  52. +
  53. +version="\
  54. +GNU config.guess ($timestamp)
  55. +
  56. +Originally written by Per Bothner.
  57. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  58. +Free Software Foundation, Inc.
  59. +
  60. +This is free software; see the source for copying conditions.  There is NO
  61. +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  62. +
  63. +help="
  64. +Try \`$me --help' for more information."
  65. +
  66. +# Parse command line
  67. +while test $# -gt 0 ; do
  68. +  case $1 in
  69. +    --time-stamp | --time* | -t )
  70. +       echo "$timestamp" ; exit 0 ;;
  71. +    --version | -v )
  72. +       echo "$version" ; exit 0 ;;
  73. +    --help | --h* | -h )
  74. +       echo "$usage"; exit 0 ;;
  75. +    -- )     # Stop option processing
  76. +       shift; break ;;
  77. +    - )    # Use stdin as input.
  78. +       break ;;
  79. +    -* )
  80. +       echo "$me: invalid option $1$help" >&2
  81. +       exit 1 ;;
  82. +    * )
  83. +       break ;;
  84. +  esac
  85. +done
  86. +
  87. +if test $# != 0; then
  88. +  echo "$me: too many arguments$help" >&2
  89. +  exit 1
  90. +fi
  91. +
  92. +
  93. +dummy=dummy-$$
  94. +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
  95. +
  96. +# CC_FOR_BUILD -- compiler used by this script.
  97. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  98. +# use `HOST_CC' if defined, but it is deprecated.
  99. +
  100. +set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
  101. + ,,)    echo "int dummy(){}" > $dummy.c ;
  102. +    for c in cc gcc c89 c99 ; do
  103. +      ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
  104. +      if test $? = 0 ; then
  105. +         CC_FOR_BUILD="$c"; break ;
  106. +      fi ;
  107. +    done ;
  108. +    rm -f $dummy.c $dummy.o $dummy.rel ;
  109. +    if test x"$CC_FOR_BUILD" = x ; then
  110. +      CC_FOR_BUILD=no_compiler_found ;
  111. +    fi
  112. +    ;;
  113. + ,,*)   CC_FOR_BUILD=$CC ;;
  114. + ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  115. +esac'
  116.  
  117.  # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
  118. -# (ghazi@noc.rutgers.edu 8/24/94.)
  119. +# (ghazi@noc.rutgers.edu 1994-08-24)
  120.  if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  121.      PATH=$PATH:/.attbin ; export PATH
  122.  fi
  123. @@ -46,11 +124,95 @@
  124.  UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
  125.  UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
  126.  
  127. -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
  128. -
  129.  # Note: order is significant - the case branches are not exclusive.
  130.  
  131.  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
  132. +    *:NetBSD:*:*)
  133. +    # NetBSD (nbsd) targets should (where applicable) match one or
  134. +    # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  135. +    # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  136. +    # switched to ELF, *-*-netbsd* would select the old
  137. +    # object file format.  This provides both forward
  138. +    # compatibility and a consistent mechanism for selecting the
  139. +    # object file format.
  140. +    #
  141. +    # Note: NetBSD doesn't particularly care about the vendor
  142. +    # portion of the name.  We always set it to "unknown".
  143. +    sysctl="sysctl -n hw.machine_arch"
  144. +    UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
  145. +        /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
  146. +    case "${UNAME_MACHINE_ARCH}" in
  147. +        armeb) machine=armeb-unknown ;;
  148. +        arm*) machine=arm-unknown ;;
  149. +        sh3el) machine=shl-unknown ;;
  150. +        sh3eb) machine=sh-unknown ;;
  151. +        *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
  152. +    esac
  153. +    # The Operating System including object format, if it has switched
  154. +    # to ELF recently, or will in the future.
  155. +    case "${UNAME_MACHINE_ARCH}" in
  156. +        arm*|i386|m68k|ns32k|sh3*|sparc|vax)
  157. +        eval $set_cc_for_build
  158. +        if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  159. +            | grep __ELF__ >/dev/null
  160. +        then
  161. +            # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  162. +            # Return netbsd for either.  FIX?
  163. +            os=netbsd
  164. +        else
  165. +            os=netbsdelf
  166. +        fi
  167. +        ;;
  168. +        *)
  169. +            os=netbsd
  170. +        ;;
  171. +    esac
  172. +    # The OS release
  173. +    release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  174. +    # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  175. +    # contains redundant information, the shorter form:
  176. +    # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  177. +    echo "${machine}-${os}${release}"
  178. +    exit 0 ;;
  179. +    amiga:OpenBSD:*:*)
  180. +    echo m68k-unknown-openbsd${UNAME_RELEASE}
  181. +    exit 0 ;;
  182. +    arc:OpenBSD:*:*)
  183. +    echo mipsel-unknown-openbsd${UNAME_RELEASE}
  184. +    exit 0 ;;
  185. +    hp300:OpenBSD:*:*)
  186. +    echo m68k-unknown-openbsd${UNAME_RELEASE}
  187. +    exit 0 ;;
  188. +    mac68k:OpenBSD:*:*)
  189. +    echo m68k-unknown-openbsd${UNAME_RELEASE}
  190. +    exit 0 ;;
  191. +    macppc:OpenBSD:*:*)
  192. +    echo powerpc-unknown-openbsd${UNAME_RELEASE}
  193. +    exit 0 ;;
  194. +    mvme68k:OpenBSD:*:*)
  195. +    echo m68k-unknown-openbsd${UNAME_RELEASE}
  196. +    exit 0 ;;
  197. +    mvme88k:OpenBSD:*:*)
  198. +    echo m88k-unknown-openbsd${UNAME_RELEASE}
  199. +    exit 0 ;;
  200. +    mvmeppc:OpenBSD:*:*)
  201. +    echo powerpc-unknown-openbsd${UNAME_RELEASE}
  202. +    exit 0 ;;
  203. +    pmax:OpenBSD:*:*)
  204. +    echo mipsel-unknown-openbsd${UNAME_RELEASE}
  205. +    exit 0 ;;
  206. +    sgi:OpenBSD:*:*)
  207. +    echo mipseb-unknown-openbsd${UNAME_RELEASE}
  208. +    exit 0 ;;
  209. +    sun3:OpenBSD:*:*)
  210. +    echo m68k-unknown-openbsd${UNAME_RELEASE}
  211. +    exit 0 ;;
  212. +    wgrisc:OpenBSD:*:*)
  213. +    echo mipsel-unknown-openbsd${UNAME_RELEASE}
  214. +    exit 0 ;;
  215. +    *:OpenBSD:*:*)
  216. +    echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
  217. +    exit 0 ;;
  218.      alpha:OSF1:*:*)
  219.      if test $UNAME_RELEASE = "V4.0"; then
  220.          UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  221. @@ -59,96 +221,89 @@
  222.      # A Tn.n version is a released field test version.
  223.      # A Xn.n version is an unreleased experimental baselevel.
  224.      # 1.2 uses "1.2" for uname -r.
  225. -    cat <<EOF >dummy.s
  226. +    cat <<EOF >$dummy.s
  227. +    .data
  228. +\$Lformat:
  229. +    .byte 37,100,45,37,120,10,0    # "%d-%x\n"
  230. +
  231. +    .text
  232.      .globl main
  233. +    .align 4
  234.      .ent main
  235.  main:
  236. -    .frame \$30,0,\$26,0
  237. -    .prologue 0
  238. -    .long 0x47e03d80 # implver $0
  239. -    lda \$2,259
  240. -    .long 0x47e20c21 # amask $2,$1
  241. -    srl \$1,8,\$2
  242. -    sll \$2,2,\$2
  243. -    sll \$0,3,\$0
  244. -    addl \$1,\$0,\$0
  245. -    addl \$2,\$0,\$0
  246. -    ret \$31,(\$26),1
  247. +    .frame \$30,16,\$26,0
  248. +    ldgp \$29,0(\$27)
  249. +    .prologue 1
  250. +    .long 0x47e03d80 # implver \$0
  251. +    lda \$2,-1
  252. +    .long 0x47e20c21 # amask \$2,\$1
  253. +    lda \$16,\$Lformat
  254. +    mov \$0,\$17
  255. +    not \$1,\$18
  256. +    jsr \$26,printf
  257. +    ldgp \$29,0(\$26)
  258. +    mov 0,\$16
  259. +    jsr \$26,exit
  260.      .end main
  261.  EOF
  262. -    ${CC-cc} dummy.s -o dummy 2>/dev/null
  263. +    eval $set_cc_for_build
  264. +    $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
  265.      if test "$?" = 0 ; then
  266. -        ./dummy
  267. -        case "$?" in
  268. -            7)
  269. +        case `./$dummy` in
  270. +            0-0)
  271.                  UNAME_MACHINE="alpha"
  272.                  ;;
  273. -            15)
  274. +            1-0)
  275.                  UNAME_MACHINE="alphaev5"
  276.                  ;;
  277. -            14)
  278. +            1-1)
  279.                  UNAME_MACHINE="alphaev56"
  280.                  ;;
  281. -            10)
  282. +            1-101)
  283.                  UNAME_MACHINE="alphapca56"
  284.                  ;;
  285. -            16)
  286. +            2-303)
  287.                  UNAME_MACHINE="alphaev6"
  288.                  ;;
  289. +            2-307)
  290. +                UNAME_MACHINE="alphaev67"
  291. +                ;;
  292. +            2-1307)
  293. +                UNAME_MACHINE="alphaev68"
  294. +                ;;
  295.          esac
  296.      fi
  297. -    rm -f dummy.s dummy
  298. +    rm -f $dummy.s $dummy
  299.      echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  300.      exit 0 ;;
  301.      Alpha\ *:Windows_NT*:*)
  302. -        # How do we know it's Interix rather than generic posix subsystem?
  303. -    # Should we change UNAME_MACHINE based on the output of uname 
  304. -    # instead of the specific alpha model.
  305. +    # How do we know it's Interix rather than the generic POSIX subsystem?
  306. +    # Should we change UNAME_MACHINE based on the output of uname instead
  307. +    # of the specific Alpha model?
  308.      echo alpha-pc-interix
  309. -    exit 0;;
  310. +    exit 0 ;;
  311.      21064:Windows_NT:50:3)
  312.      echo alpha-dec-winnt3.5
  313.      exit 0 ;;
  314.      Amiga*:UNIX_System_V:4.0:*)
  315. -    echo m68k-cbm-sysv4
  316. +    echo m68k-unknown-sysv4
  317.      exit 0;;
  318. -    amiga:NetBSD:*:*)
  319. -      echo m68k-cbm-netbsd${UNAME_RELEASE}
  320. -      exit 0 ;;
  321. -    amiga:OpenBSD:*:*)
  322. -    echo m68k-unknown-openbsd${UNAME_RELEASE}
  323. -    exit 0 ;;
  324.      *:[Aa]miga[Oo][Ss]:*:*)
  325.      echo ${UNAME_MACHINE}-unknown-amigaos
  326.      exit 0 ;;
  327. -    arc64:OpenBSD:*:*)
  328. -    echo mips64el-unknown-openbsd${UNAME_RELEASE}
  329. -    exit 0 ;;
  330. -    arc:OpenBSD:*:*)
  331. -    echo mipsel-unknown-openbsd${UNAME_RELEASE}
  332. -    exit 0 ;;
  333. -    hkmips:OpenBSD:*:*)
  334. -    echo mips-unknown-openbsd${UNAME_RELEASE}
  335. -    exit 0 ;;
  336. -    pmax:OpenBSD:*:*)
  337. -    echo mipsel-unknown-openbsd${UNAME_RELEASE}
  338. -    exit 0 ;;
  339. -    sgi:OpenBSD:*:*)
  340. -    echo mips-unknown-openbsd${UNAME_RELEASE}
  341. +    *:[Mm]orph[Oo][Ss]:*:*)
  342. +    echo ${UNAME_MACHINE}-unknown-morphos
  343.      exit 0 ;;
  344. -    wgrisc:OpenBSD:*:*)
  345. -    echo mipsel-unknown-openbsd${UNAME_RELEASE}
  346. +    *:OS/390:*:*)
  347. +    echo i370-ibm-openedition
  348.      exit 0 ;;
  349.      arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
  350.      echo arm-acorn-riscix${UNAME_RELEASE}
  351.      exit 0;;
  352. -    arm32:NetBSD:*:*)
  353. -    echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  354. -    exit 0 ;;
  355. -    SR2?01:HI-UX/MPP:*:*)
  356. +    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
  357.      echo hppa1.1-hitachi-hiuxmpp
  358.      exit 0;;
  359. -    Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
  360. +    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  361.      # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
  362.      if test "`(/bin/universe) 2>/dev/null`" = att ; then
  363.          echo pyramid-pyramid-sysv3
  364. @@ -156,7 +311,7 @@
  365.          echo pyramid-pyramid-bsd
  366.      fi
  367.      exit 0 ;;
  368. -    NILE:*:*:dcosx)
  369. +    NILE*:*:*:dcosx)
  370.      echo pyramid-pyramid-svr4
  371.      exit 0 ;;
  372.      sun4H:SunOS:5.*:*)
  373. @@ -187,7 +342,7 @@
  374.      echo m68k-sun-sunos${UNAME_RELEASE}
  375.      exit 0 ;;
  376.      sun*:*:4.2BSD:*)
  377. -    UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  378. +    UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  379.      test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
  380.      case "`/bin/arch`" in
  381.          sun3)
  382. @@ -201,29 +356,31 @@
  383.      aushp:SunOS:*:*)
  384.      echo sparc-auspex-sunos${UNAME_RELEASE}
  385.      exit 0 ;;
  386. -    atari*:NetBSD:*:*)
  387. -    echo m68k-atari-netbsd${UNAME_RELEASE}
  388. -    exit 0 ;;
  389. -    atari*:OpenBSD:*:*)
  390. -    echo m68k-unknown-openbsd${UNAME_RELEASE}
  391. -    exit 0 ;;
  392. -    sun3*:NetBSD:*:*)
  393. -    echo m68k-sun-netbsd${UNAME_RELEASE}
  394. -    exit 0 ;;
  395. -    sun3*:OpenBSD:*:*)
  396. -    echo m68k-unknown-openbsd${UNAME_RELEASE}
  397. +    # The situation for MiNT is a little confusing.  The machine name
  398. +    # can be virtually everything (everything which is not
  399. +    # "atarist" or "atariste" at least should have a processor
  400. +    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
  401. +    # to the lowercase version "mint" (or "freemint").  Finally
  402. +    # the system name "TOS" denotes a system which is actually not
  403. +    # MiNT.  But MiNT is downward compatible to TOS, so this should
  404. +    # be no problem.
  405. +    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
  406. +        echo m68k-atari-mint${UNAME_RELEASE}
  407. +    exit 0 ;;
  408. +    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
  409. +    echo m68k-atari-mint${UNAME_RELEASE}
  410. +        exit 0 ;;
  411. +    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
  412. +        echo m68k-atari-mint${UNAME_RELEASE}
  413.      exit 0 ;;
  414. -    mac68k:NetBSD:*:*)
  415. -    echo m68k-apple-netbsd${UNAME_RELEASE}
  416. +    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
  417. +        echo m68k-milan-mint${UNAME_RELEASE}
  418.      exit 0 ;;
  419. -    mac68k:OpenBSD:*:*)
  420. -    echo m68k-unknown-openbsd${UNAME_RELEASE}
  421. -    exit 0 ;;
  422. -    mvme68k:OpenBSD:*:*)
  423. -    echo m68k-unknown-openbsd${UNAME_RELEASE}
  424. +    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
  425. +        echo m68k-hades-mint${UNAME_RELEASE}
  426.      exit 0 ;;
  427. -    mvme88k:OpenBSD:*:*)
  428. -    echo m88k-unknown-openbsd${UNAME_RELEASE}
  429. +    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
  430. +        echo m68k-unknown-mint${UNAME_RELEASE}
  431.      exit 0 ;;
  432.      powerpc:machten:*:*)
  433.      echo powerpc-apple-machten${UNAME_RELEASE}
  434. @@ -237,12 +394,18 @@
  435.      VAX*:ULTRIX*:*:*)
  436.      echo vax-dec-ultrix${UNAME_RELEASE}
  437.      exit 0 ;;
  438. -    2020:CLIX:*:*)
  439. +    2020:CLIX:*:* | 2430:CLIX:*:*)
  440.      echo clipper-intergraph-clix${UNAME_RELEASE}
  441.      exit 0 ;;
  442.      mips:*:*:UMIPS | mips:*:*:RISCos)
  443. -    sed 's/^    //' << EOF >dummy.c
  444. -    int main (argc, argv) int argc; char **argv; {
  445. +    eval $set_cc_for_build
  446. +    sed 's/^    //' << EOF >$dummy.c
  447. +#ifdef __cplusplus
  448. +#include <stdio.h>  /* for printf() prototype */
  449. +    int main (int argc, char *argv[]) {
  450. +#else
  451. +    int main (argc, argv) int argc; char *argv[]; {
  452. +#endif
  453.      #if defined (host_mips) && defined (MIPSEB)
  454.      #if defined (SYSTYPE_SYSV)
  455.        printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
  456. @@ -257,12 +420,18 @@
  457.        exit (-1);
  458.      }
  459.  EOF
  460. -    ${CC-cc} dummy.c -o dummy \
  461. -      && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  462. -      && rm dummy.c dummy && exit 0
  463. -    rm -f dummy.c dummy
  464. +    $CC_FOR_BUILD $dummy.c -o $dummy \
  465. +      && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  466. +      && rm -f $dummy.c $dummy && exit 0
  467. +    rm -f $dummy.c $dummy
  468.      echo mips-mips-riscos${UNAME_RELEASE}
  469.      exit 0 ;;
  470. +    Motorola:PowerMAX_OS:*:*)
  471. +    echo powerpc-motorola-powermax
  472. +    exit 0 ;;
  473. +    Night_Hawk:*:*:PowerMAX_OS)
  474. +    echo powerpc-harris-powermax
  475. +    exit 0 ;;
  476.      Night_Hawk:Power_UNIX:*:*)
  477.      echo powerpc-harris-powerunix
  478.      exit 0 ;;
  479. @@ -278,14 +447,17 @@
  480.      AViiON:dgux:*:*)
  481.          # DG/UX returns AViiON for all architectures
  482.          UNAME_PROCESSOR=`/usr/bin/uname -p`
  483. -        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
  484. -    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
  485. -         -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
  486. +    if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  487. +    then
  488. +        if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  489. +           [ ${TARGET_BINARY_INTERFACE}x = x ]
  490. +        then
  491.          echo m88k-dg-dgux${UNAME_RELEASE}
  492.      else
  493.          echo m88k-dg-dguxbcs${UNAME_RELEASE}
  494.      fi
  495. -        else echo i586-dg-dgux${UNAME_RELEASE}
  496. +    else
  497. +        echo i586-dg-dgux${UNAME_RELEASE}
  498.          fi
  499.       exit 0 ;;
  500.      M88*:DolphinOS:*:*)    # DolphinOS (SVR3)
  501. @@ -307,12 +479,21 @@
  502.      ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
  503.      echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
  504.      exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
  505. -    i?86:AIX:*:*)
  506. +    i*86:AIX:*:*)
  507.      echo i386-ibm-aix
  508.      exit 0 ;;
  509. +    ia64:AIX:*:*)
  510. +    if [ -x /usr/bin/oslevel ] ; then
  511. +        IBM_REV=`/usr/bin/oslevel`
  512. +    else
  513. +        IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  514. +    fi
  515. +    echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  516. +    exit 0 ;;
  517.      *:AIX:2:3)
  518.      if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
  519. -        sed 's/^        //' << EOF >dummy.c
  520. +        eval $set_cc_for_build
  521. +        sed 's/^        //' << EOF >$dummy.c
  522.          #include <sys/systemcfg.h>
  523.  
  524.          main()
  525. @@ -323,8 +504,8 @@
  526.              exit(0);
  527.              }
  528.  EOF
  529. -        ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
  530. -        rm -f dummy.c dummy
  531. +        $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  532. +        rm -f $dummy.c $dummy
  533.          echo rs6000-ibm-aix3.2.5
  534.      elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  535.          echo rs6000-ibm-aix3.2.4
  536. @@ -332,8 +513,9 @@
  537.          echo rs6000-ibm-aix3.2
  538.      fi
  539.      exit 0 ;;
  540. -    *:AIX:*:4)
  541. -    if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
  542. +    *:AIX:*:[45])
  543. +    IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  544. +    if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
  545.          IBM_ARCH=rs6000
  546.      else
  547.          IBM_ARCH=powerpc
  548. @@ -341,7 +523,7 @@
  549.      if [ -x /usr/bin/oslevel ] ; then
  550.          IBM_REV=`/usr/bin/oslevel`
  551.      else
  552. -        IBM_REV=4.${UNAME_RELEASE}
  553. +        IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  554.      fi
  555.      echo ${IBM_ARCH}-ibm-aix${IBM_REV}
  556.      exit 0 ;;
  557. @@ -351,7 +533,7 @@
  558.      ibmrt:4.4BSD:*|romp-ibm:BSD:*)
  559.      echo romp-ibm-bsd4.4
  560.      exit 0 ;;
  561. -    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
  562. +    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
  563.      echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
  564.      exit 0 ;;                           # report: romp-ibm BSD 4.3
  565.      *:BOSX:*:*)
  566. @@ -366,16 +548,31 @@
  567.      hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
  568.      echo m68k-hp-bsd4.4
  569.      exit 0 ;;
  570. -    *9??*:MPE/iX:*:*)
  571. -    echo hppa1.0-hp-mpeix
  572. -    exit 0 ;;
  573.      9000/[34678]??:HP-UX:*:*)
  574. +    HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  575.      case "${UNAME_MACHINE}" in
  576.          9000/31? )            HP_ARCH=m68000 ;;
  577.          9000/[34]?? )         HP_ARCH=m68k ;;
  578. -        9000/[678][0-9][0-9] )
  579. +        9000/[678][0-9][0-9])
  580. +        if [ -x /usr/bin/getconf ]; then
  581. +            sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  582. +                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  583. +                    case "${sc_cpu_version}" in
  584. +                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
  585. +                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
  586. +                      532)                      # CPU_PA_RISC2_0
  587. +                        case "${sc_kernel_bits}" in
  588. +                          32) HP_ARCH="hppa2.0n" ;;
  589. +                          64) HP_ARCH="hppa2.0w" ;;
  590. +              '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
  591. +                        esac ;;
  592. +                    esac
  593. +        fi
  594. +        if [ "${HP_ARCH}" = "" ]; then
  595. +            eval $set_cc_for_build
  596. +            sed 's/^              //' << EOF >$dummy.c
  597.  
  598. -              sed 's/^              //' << EOF >dummy.c
  599. +              #define _HPUX_SOURCE
  600.                #include <stdlib.h>
  601.                #include <unistd.h>
  602.                
  603. @@ -406,14 +603,20 @@
  604.                    exit (0);
  605.                }
  606.  EOF
  607. -    (${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy`
  608. -    rm -f dummy.c dummy
  609. +            (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
  610. +            if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
  611. +            rm -f $dummy.c $dummy
  612. +        fi ;;
  613.      esac
  614. -    HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  615.      echo ${HP_ARCH}-hp-hpux${HPUX_REV}
  616.      exit 0 ;;
  617. +    ia64:HP-UX:*:*)
  618. +    HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  619. +    echo ia64-hp-hpux${HPUX_REV}
  620. +    exit 0 ;;
  621.      3050*:HI-UX:*:*)
  622. -    sed 's/^    //' << EOF >dummy.c
  623. +    eval $set_cc_for_build
  624. +    sed 's/^    //' << EOF >$dummy.c
  625.      #include <unistd.h>
  626.      int
  627.      main ()
  628. @@ -438,8 +641,8 @@
  629.        exit (0);
  630.      }
  631.  EOF
  632. -    ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
  633. -    rm -f dummy.c dummy
  634. +    $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
  635. +    rm -f $dummy.c $dummy
  636.      echo unknown-hitachi-hiuxwe2
  637.      exit 0 ;;
  638.      9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
  639. @@ -448,13 +651,16 @@
  640.      9000/8??:4.3bsd:*:*)
  641.      echo hppa1.0-hp-bsd
  642.      exit 0 ;;
  643. +    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
  644. +    echo hppa1.0-hp-mpeix
  645. +    exit 0 ;;
  646.      hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
  647.      echo hppa1.1-hp-osf
  648.      exit 0 ;;
  649.      hp8??:OSF1:*:*)
  650.      echo hppa1.0-hp-osf
  651.      exit 0 ;;
  652. -    i?86:OSF1:*:*)
  653. +    i*86:OSF1:*:*)
  654.      if [ -x /usr/sbin/sysversion ] ; then
  655.          echo ${UNAME_MACHINE}-unknown-osf1mk
  656.      else
  657. @@ -464,9 +670,6 @@
  658.      parisc*:Lites*:*:*)
  659.      echo hppa1.1-hp-lites
  660.      exit 0 ;;
  661. -    hppa*:OpenBSD:*:*)
  662. -    echo hppa-unknown-openbsd
  663. -    exit 0 ;;
  664.      C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
  665.      echo c1-convex-bsd
  666.          exit 0 ;;
  667. @@ -485,71 +688,68 @@
  668.      C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
  669.      echo c4-convex-bsd
  670.          exit 0 ;;
  671. -    CRAY*X-MP:*:*:*)
  672. -    echo xmp-cray-unicos
  673. -        exit 0 ;;
  674.      CRAY*Y-MP:*:*:*)
  675. -    echo ymp-cray-unicos${UNAME_RELEASE}
  676. +    echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  677.      exit 0 ;;
  678.      CRAY*[A-Z]90:*:*:*)
  679.      echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
  680.      | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
  681. -          -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
  682. +          -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
  683. +          -e 's/\.[^.]*$/.X/'
  684.      exit 0 ;;
  685.      CRAY*TS:*:*:*)
  686. -    echo t90-cray-unicos${UNAME_RELEASE}
  687. +    echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  688.      exit 0 ;;
  689. -    CRAY-2:*:*:*)
  690. -    echo cray2-cray-unicos
  691. -        exit 0 ;;
  692. -    F300:UNIX_System_V:*:*)
  693. -        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
  694. -        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
  695. -        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
  696. +    CRAY*T3D:*:*:*)
  697. +    echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  698.          exit 0 ;;
  699. -    F301:UNIX_System_V:*:*)
  700. -       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
  701. +    CRAY*T3E:*:*:*)
  702. +    echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  703.         exit 0 ;;
  704. -    hp3[0-9][05]:NetBSD:*:*)
  705. -    echo m68k-hp-netbsd${UNAME_RELEASE}
  706. +    CRAY*SV1:*:*:*)
  707. +    echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  708.      exit 0 ;;
  709. -    hp300:OpenBSD:*:*)
  710. -    echo m68k-unknown-openbsd${UNAME_RELEASE}
  711. +    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  712. +    FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  713. +        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
  714. +        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
  715. +        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
  716.      exit 0 ;;
  717. -    i?86:BSD/386:*:* | *:BSD/OS:*:*)
  718. +    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
  719.      echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
  720.      exit 0 ;;
  721. -    *:FreeBSD:*:*)
  722. -        if test -x /usr/bin/objformat -a "elf" = "`/usr/bin/objformat`"; then
  723. -          echo ${UNAME_MACHINE}-unknown-freebsdelf
  724. -        else
  725. -      echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
  726. -      fi
  727. +    sparc*:BSD/OS:*:*)
  728. +    echo sparc-unknown-bsdi${UNAME_RELEASE}
  729.      exit 0 ;;
  730. -    *:NetBSD:*:*)
  731. -    echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  732. +    *:BSD/OS:*:*)
  733. +    echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  734.      exit 0 ;;
  735. -    *:OpenBSD:*:*)
  736. -    echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  737. +    *:FreeBSD:*:*)
  738. +    echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
  739.      exit 0 ;;
  740.      i*:CYGWIN*:*)
  741. -    echo ${UNAME_MACHINE}-pc-cygwin32
  742. +    echo ${UNAME_MACHINE}-pc-cygwin
  743.      exit 0 ;;
  744.      i*:MINGW*:*)
  745.      echo ${UNAME_MACHINE}-pc-mingw32
  746.      exit 0 ;;
  747. +    i*:PW*:*)
  748. +    echo ${UNAME_MACHINE}-pc-pw32
  749. +    exit 0 ;;
  750. +    x86:Interix*:3*)
  751. +    echo i386-pc-interix3
  752. +    exit 0 ;;
  753.      i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
  754. -        # How do we know it's Interix rather than generic posix subsystem?
  755. +    # How do we know it's Interix rather than the generic POSIX subsystem?
  756.      # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  757. -    # change UNAME_MACHINE based on the output of uname instead of
  758. -    # i386?
  759. +    # UNAME_MACHINE based on the output of uname instead of i386?
  760.      echo i386-pc-interix
  761.      exit 0 ;;
  762.      i*:UWIN*:*)
  763.      echo ${UNAME_MACHINE}-pc-uwin
  764.      exit 0 ;;
  765.      p*:CYGWIN*:*)
  766. -    echo powerpcle-unknown-cygwin32
  767. +    echo powerpcle-unknown-cygwin
  768.      exit 0 ;;
  769.      prep*:SunOS:5.*:*)
  770.      echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  771. @@ -557,175 +757,142 @@
  772.      *:GNU:*:*)
  773.      echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
  774.      exit 0 ;;
  775. -    *:Linux:*:*)
  776. -    # uname on the ARM produces all sorts of strangeness, and we need to
  777. -    # filter it out.
  778. -    case "$UNAME_MACHINE" in
  779. -      armv*)              UNAME_MACHINE=$UNAME_MACHINE ;;
  780. -      arm* | sa110*)          UNAME_MACHINE="arm" ;;
  781. +    i*86:Minix:*:*)
  782. +    echo ${UNAME_MACHINE}-pc-minix
  783. +    exit 0 ;;
  784. +    arm*:Linux:*:*)
  785. +    echo ${UNAME_MACHINE}-unknown-linux-gnu
  786. +    exit 0 ;;
  787. +    ia64:Linux:*:*)
  788. +    echo ${UNAME_MACHINE}-unknown-linux-gnu
  789. +    exit 0 ;;
  790. +    m68*:Linux:*:*)
  791. +    echo ${UNAME_MACHINE}-unknown-linux-gnu
  792. +    exit 0 ;;
  793. +    mips:Linux:*:*)
  794. +    eval $set_cc_for_build
  795. +    sed 's/^    //' << EOF >$dummy.c
  796. +    #undef CPU
  797. +    #undef mips
  798. +    #undef mipsel
  799. +    #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
  800. +    CPU=mipsel
  801. +    #else
  802. +    #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
  803. +    CPU=mips
  804. +    #else
  805. +    CPU=
  806. +    #endif
  807. +    #endif
  808. +EOF
  809. +    eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
  810. +    rm -f $dummy.c
  811. +    test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
  812. +    ;;
  813. +    ppc:Linux:*:*)
  814. +    echo powerpc-unknown-linux-gnu
  815. +    exit 0 ;;
  816. +    ppc64:Linux:*:*)
  817. +    echo powerpc64-unknown-linux-gnu
  818. +    exit 0 ;;
  819. +    alpha:Linux:*:*)
  820. +    case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
  821. +      EV5)   UNAME_MACHINE=alphaev5 ;;
  822. +      EV56)  UNAME_MACHINE=alphaev56 ;;
  823. +      PCA56) UNAME_MACHINE=alphapca56 ;;
  824. +      PCA57) UNAME_MACHINE=alphapca56 ;;
  825. +      EV6)   UNAME_MACHINE=alphaev6 ;;
  826. +      EV67)  UNAME_MACHINE=alphaev67 ;;
  827. +      EV68*) UNAME_MACHINE=alphaev68 ;;
  828.      esac
  829. -
  830. +    objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
  831. +    if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
  832. +    echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  833. +    exit 0 ;;
  834. +    parisc:Linux:*:* | hppa:Linux:*:*)
  835. +    # Look for CPU level
  836. +    case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  837. +      PA7*) echo hppa1.1-unknown-linux-gnu ;;
  838. +      PA8*) echo hppa2.0-unknown-linux-gnu ;;
  839. +      *)    echo hppa-unknown-linux-gnu ;;
  840. +    esac
  841. +    exit 0 ;;
  842. +    parisc64:Linux:*:* | hppa64:Linux:*:*)
  843. +    echo hppa64-unknown-linux-gnu
  844. +    exit 0 ;;
  845. +    s390:Linux:*:* | s390x:Linux:*:*)
  846. +    echo ${UNAME_MACHINE}-ibm-linux
  847. +    exit 0 ;;
  848. +    sh*:Linux:*:*)
  849. +    echo ${UNAME_MACHINE}-unknown-linux-gnu
  850. +    exit 0 ;;
  851. +    sparc:Linux:*:* | sparc64:Linux:*:*)
  852. +    echo ${UNAME_MACHINE}-unknown-linux-gnu
  853. +    exit 0 ;;
  854. +    x86_64:Linux:*:*)
  855. +    echo x86_64-unknown-linux-gnu
  856. +    exit 0 ;;
  857. +    i*86:Linux:*:*)
  858.      # The BFD linker knows what the default object file format is, so
  859. -    # first see if it will tell us.
  860. -    ld_help_string=`ld --help 2>&1`
  861. -    ld_supported_emulations=`echo $ld_help_string \
  862. -             | sed -ne '/supported emulations:/!d
  863. +    # first see if it will tell us. cd to the root directory to prevent
  864. +    # problems with other programs or directories called `ld' in the path.
  865. +    # Set LC_ALL=C to ensure ld outputs messages in English.
  866. +    ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
  867. +             | sed -ne '/supported targets:/!d
  868.                      s/[     ][     ]*/ /g
  869. -                    s/.*supported emulations: *//
  870. +                    s/.*supported targets: *//
  871.                      s/ .*//
  872.                      p'`
  873. -        case "$ld_supported_emulations" in
  874. -      i?86linux)  echo "${UNAME_MACHINE}-pc-linux-gnuaout"      ; exit 0 ;;
  875. -      i?86coff)   echo "${UNAME_MACHINE}-pc-linux-gnucoff"      ; exit 0 ;;
  876. -      sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
  877. -      armlinux)   echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
  878. -      m68klinux)  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
  879. -      elf32ppc | elf32ppclinux)
  880. -        # Determine Lib Version
  881. -        cat >dummy.c <<EOF
  882. -#include <features.h>
  883. -#if defined(__GLIBC__)
  884. -extern char __libc_version[];
  885. -extern char __libc_release[];
  886. -#endif
  887. -main(argc, argv)
  888. -     int argc;
  889. -     char *argv[];
  890. -{
  891. -#if defined(__GLIBC__)
  892. -  printf("%s %s\n", __libc_version, __libc_release);
  893. -#else
  894. -  printf("unkown\n");
  895. -#endif
  896. -  return 0;
  897. -}
  898. -EOF
  899. -        LIBC=""
  900. -        ${CC-cc} dummy.c -o dummy 2>/dev/null
  901. -        if test "$?" = 0 ; then
  902. -            ./dummy | grep 1\.99 > /dev/null
  903. -            if test "$?" = 0 ; then
  904. -                LIBC="libc1"
  905. -            fi
  906. -        fi    
  907. -        rm -f dummy.c dummy
  908. -        echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
  909. -    esac
  910. -
  911. -    if test "${UNAME_MACHINE}" = "alpha" ; then
  912. -        sed 's/^    //'  <<EOF >dummy.s
  913. -        .globl main
  914. -        .ent main
  915. -    main:
  916. -        .frame \$30,0,\$26,0
  917. -        .prologue 0
  918. -        .long 0x47e03d80 # implver $0
  919. -        lda \$2,259
  920. -        .long 0x47e20c21 # amask $2,$1
  921. -        srl \$1,8,\$2
  922. -        sll \$2,2,\$2
  923. -        sll \$0,3,\$0
  924. -        addl \$1,\$0,\$0
  925. -        addl \$2,\$0,\$0
  926. -        ret \$31,(\$26),1
  927. -        .end main
  928. -EOF
  929. -        LIBC=""
  930. -        ${CC-cc} dummy.s -o dummy 2>/dev/null
  931. -        if test "$?" = 0 ; then
  932. -            ./dummy
  933. -            case "$?" in
  934. -            7)
  935. -                UNAME_MACHINE="alpha"
  936. -                ;;
  937. -            15)
  938. -                UNAME_MACHINE="alphaev5"
  939. -                ;;
  940. -            14)
  941. -                UNAME_MACHINE="alphaev56"
  942. -                ;;
  943. -            10)
  944. -                UNAME_MACHINE="alphapca56"
  945. -                ;;
  946. -            16)
  947. -                UNAME_MACHINE="alphaev6"
  948. -                ;;
  949. -            esac    
  950. -
  951. -            objdump --private-headers dummy | \
  952. -              grep ld.so.1 > /dev/null
  953. -            if test "$?" = 0 ; then
  954. -                LIBC="libc1"
  955. -            fi
  956. -        fi    
  957. -        rm -f dummy.s dummy
  958. -        echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
  959. -    elif test "${UNAME_MACHINE}" = "mips" ; then
  960. -      cat >dummy.c <<EOF
  961. -main(argc, argv)
  962. -     int argc;
  963. -     char *argv[];
  964. -{
  965. -#ifdef __MIPSEB__
  966. -  printf ("%s-unknown-linux-gnu\n", argv[1]);
  967. -#endif
  968. -#ifdef __MIPSEL__
  969. -  printf ("%sel-unknown-linux-gnu\n", argv[1]);
  970. -#endif
  971. -  return 0;
  972. -}
  973. -EOF
  974. -      ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
  975. -      rm -f dummy.c dummy
  976. -    else
  977. -      # Either a pre-BFD a.out linker (linux-gnuoldld)
  978. -      # or one that does not give us useful --help.
  979. -      # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
  980. -      # If ld does not provide *any* "supported emulations:"
  981. -      # that means it is gnuoldld.
  982. -      echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
  983. -      test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
  984. -
  985. -      case "${UNAME_MACHINE}" in
  986. -      i?86)
  987. -        VENDOR=pc;
  988. -        ;;
  989. -      *)
  990. -        VENDOR=unknown;
  991. +        case "$ld_supported_targets" in
  992. +      elf32-i386)
  993. +        TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  994.          ;;
  995. +      a.out-i386-linux)
  996. +        echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  997. +        exit 0 ;;        
  998. +      coff-i386)
  999. +        echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  1000. +        exit 0 ;;
  1001. +      "")
  1002. +        # Either a pre-BFD a.out linker (linux-gnuoldld) or
  1003. +        # one that does not give us useful --help.
  1004. +        echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
  1005. +        exit 0 ;;
  1006.        esac
  1007.        # Determine whether the default compiler is a.out or elf
  1008. -      cat >dummy.c <<EOF
  1009. -#include <features.h>
  1010. -main(argc, argv)
  1011. -     int argc;
  1012. -     char *argv[];
  1013. -{
  1014. -#ifdef __ELF__
  1015. -# ifdef __GLIBC__
  1016. -#  if __GLIBC__ >= 2
  1017. -    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
  1018. -#  else
  1019. -    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  1020. -#  endif
  1021. -# else
  1022. -   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
  1023. -# endif
  1024. -#else
  1025. -  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
  1026. -#endif
  1027. -  return 0;
  1028. -}
  1029. +    eval $set_cc_for_build
  1030. +    sed 's/^    //' << EOF >$dummy.c
  1031. +    #include <features.h>
  1032. +    #ifdef __ELF__
  1033. +    # ifdef __GLIBC__
  1034. +    #  if __GLIBC__ >= 2
  1035. +    LIBC=gnu
  1036. +    #  else
  1037. +    LIBC=gnulibc1
  1038. +    #  endif
  1039. +    # else
  1040. +    LIBC=gnulibc1
  1041. +    # endif
  1042. +    #else
  1043. +    #ifdef __INTEL_COMPILER
  1044. +    LIBC=gnu
  1045. +    #else
  1046. +    LIBC=gnuaout
  1047. +    #endif
  1048. +    #endif
  1049.  EOF
  1050. -      ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
  1051. -      rm -f dummy.c dummy
  1052. -    fi ;;
  1053. -# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
  1054. -# are messed up and put the nodename in both sysname and nodename.
  1055. -    i?86:DYNIX/ptx:4*:*)
  1056. +    eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
  1057. +    rm -f $dummy.c
  1058. +    test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
  1059. +    test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  1060. +    ;;
  1061. +    i*86:DYNIX/ptx:4*:*)
  1062. +    # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
  1063. +    # earlier versions are messed up and put the nodename in both
  1064. +    # sysname and nodename.
  1065.      echo i386-sequent-sysv4
  1066.      exit 0 ;;
  1067. -    i?86:UNIX_SV:4.2MP:2.*)
  1068. +    i*86:UNIX_SV:4.2MP:2.*)
  1069.          # Unixware is an offshoot of SVR4, but it has its own version
  1070.          # number series starting with 2...
  1071.          # I am not positive that other SVR4 systems won't match this,
  1072. @@ -733,26 +900,23 @@
  1073.          # Use sysv4.2uw... so that sysv4* matches it.
  1074.      echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
  1075.      exit 0 ;;
  1076. -    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
  1077. +    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  1078. +    UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
  1079.      if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  1080. -        echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
  1081. +        echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
  1082.      else
  1083. -        echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
  1084. +        echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
  1085.      fi
  1086.      exit 0 ;;
  1087. -    i?86:*:5:7*)
  1088. -       UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
  1089. -       (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  1090. -       (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
  1091. -               && UNAME_MACHINE=i586
  1092. -# 5.0.4c returns "Pent II".  5.0.5 returns PentII
  1093. -       (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) \
  1094. -               && UNAME_MACHINE=i686
  1095. -       (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
  1096. -               && UNAME_MACHINE=i686
  1097. -       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
  1098. +    i*86:*:5:[78]*)
  1099. +    case `/bin/uname -X | grep "^Machine"` in
  1100. +        *486*)         UNAME_MACHINE=i486 ;;
  1101. +        *Pentium)         UNAME_MACHINE=i586 ;;
  1102. +        *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
  1103. +    esac
  1104. +    echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
  1105.         exit 0 ;;
  1106. -    i?86:*:3.2:*)
  1107. +    i*86:*:3.2:*)
  1108.      if test -f /usr/options/cb.name; then
  1109.          UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
  1110.          echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
  1111. @@ -761,9 +925,7 @@
  1112.          (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
  1113.          (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
  1114.              && UNAME_MACHINE=i586
  1115. -        (/bin/uname -X|egrep '^Machine.*PentII' >/dev/null) \
  1116. -            && UNAME_MACHINE=i686
  1117. -        (/bin/uname -X|egrep '^Machine.*Pent II' >/dev/null) \
  1118. +        (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
  1119.              && UNAME_MACHINE=i686
  1120.                  (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
  1121.                          && UNAME_MACHINE=i686
  1122. @@ -772,7 +934,11 @@
  1123.          echo ${UNAME_MACHINE}-pc-sysv32
  1124.      fi
  1125.      exit 0 ;;
  1126. +    i*86:*DOS:*:*)
  1127. +    echo ${UNAME_MACHINE}-pc-msdosdjgpp
  1128. +    exit 0 ;;
  1129.      pc:*:*:*)
  1130. +    # Left here for compatibility:
  1131.          # uname -m prints for DJGPP always 'pc', but it prints nothing about
  1132.          # the processor, so we play safe by assuming i386.
  1133.      echo i386-pc-msdosdjgpp
  1134. @@ -796,7 +962,7 @@
  1135.      exit 0 ;;
  1136.      M68*:*:R3V[567]*:*)
  1137.      test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
  1138. -    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
  1139. +    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
  1140.      OS_REL=''
  1141.      test -r /etc/.relid \
  1142.      && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
  1143. @@ -807,28 +973,31 @@
  1144.      3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
  1145.          /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
  1146.            && echo i486-ncr-sysv4 && exit 0 ;;
  1147. -    m68*:LynxOS:2.*:*)
  1148. +    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
  1149.      echo m68k-unknown-lynxos${UNAME_RELEASE}
  1150.      exit 0 ;;
  1151.      mc68030:UNIX_System_V:4.*:*)
  1152.      echo m68k-atari-sysv4
  1153.      exit 0 ;;
  1154. -    i?86:LynxOS:2.*:*)
  1155. +    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
  1156.      echo i386-unknown-lynxos${UNAME_RELEASE}
  1157.      exit 0 ;;
  1158.      TSUNAMI:LynxOS:2.*:*)
  1159.      echo sparc-unknown-lynxos${UNAME_RELEASE}
  1160.      exit 0 ;;
  1161. -    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
  1162. +    rs6000:LynxOS:2.*:*)
  1163.      echo rs6000-unknown-lynxos${UNAME_RELEASE}
  1164.      exit 0 ;;
  1165. +    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
  1166. +    echo powerpc-unknown-lynxos${UNAME_RELEASE}
  1167. +    exit 0 ;;
  1168.      SM[BE]S:UNIX_SV:*:*)
  1169.      echo mips-dde-sysv${UNAME_RELEASE}
  1170.      exit 0 ;;
  1171. -    RM*:SINIX-*:*:*)
  1172. +    RM*:ReliantUNIX-*:*:*)
  1173.      echo mips-sni-sysv4
  1174.      exit 0 ;;
  1175. -    RM*:ReliantUNIX-*:*:*)
  1176. +    RM*:SINIX-*:*:*)
  1177.      echo mips-sni-sysv4
  1178.      exit 0 ;;
  1179.      *:SINIX-*:*:*)
  1180. @@ -839,7 +1008,7 @@
  1181.          echo ns32k-sni-sysv
  1182.      fi
  1183.      exit 0 ;;
  1184. -    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
  1185. +    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
  1186.                             # says <Richard.M.Bartel@ccMail.Census.GOV>
  1187.          echo i586-unisys-sysv4
  1188.          exit 0 ;;
  1189. @@ -852,13 +1021,17 @@
  1190.      # From seanf@swdc.stratus.com.
  1191.      echo i860-stratus-sysv4
  1192.      exit 0 ;;
  1193. +    *:VOS:*:*)
  1194. +    # From Paul.Green@stratus.com.
  1195. +    echo hppa1.1-stratus-vos
  1196. +    exit 0 ;;
  1197.      mc68*:A/UX:*:*)
  1198.      echo m68k-apple-aux${UNAME_RELEASE}
  1199.      exit 0 ;;
  1200. -    news*:NEWS-OS:*:6*)
  1201. +    news*:NEWS-OS:6*:*)
  1202.      echo mips-sony-newsos6
  1203.      exit 0 ;;
  1204. -    R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
  1205. +    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
  1206.      if [ -d /usr/nec ]; then
  1207.              echo mips-nec-sysv${UNAME_RELEASE}
  1208.      else
  1209. @@ -874,12 +1047,91 @@
  1210.      BePC:BeOS:*:*)    # BeOS running on Intel PC compatible.
  1211.      echo i586-pc-beos
  1212.      exit 0 ;;
  1213. +    SX-4:SUPER-UX:*:*)
  1214. +    echo sx4-nec-superux${UNAME_RELEASE}
  1215. +    exit 0 ;;
  1216. +    SX-5:SUPER-UX:*:*)
  1217. +    echo sx5-nec-superux${UNAME_RELEASE}
  1218. +    exit 0 ;;
  1219. +    Power*:Rhapsody:*:*)
  1220. +    echo powerpc-apple-rhapsody${UNAME_RELEASE}
  1221. +    exit 0 ;;
  1222. +    *:Rhapsody:*:*)
  1223. +    echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
  1224. +    exit 0 ;;
  1225. +    *:Darwin:*:*)
  1226. +    echo `uname -p`-apple-darwin${UNAME_RELEASE}
  1227. +    exit 0 ;;
  1228. +    *:procnto*:*:* | *:QNX:[0123456789]*:*)
  1229. +    UNAME_PROCESSOR=`uname -p`
  1230. +    if test "$UNAME_PROCESSOR" = "x86"; then
  1231. +        UNAME_PROCESSOR=i386
  1232. +        UNAME_MACHINE=pc
  1233. +    fi
  1234. +    echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
  1235. +    exit 0 ;;
  1236. +    *:QNX:*:4*)
  1237. +    echo i386-pc-qnx
  1238. +    exit 0 ;;
  1239. +    NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
  1240. +    echo nsr-tandem-nsk${UNAME_RELEASE}
  1241. +    exit 0 ;;
  1242. +    *:NonStop-UX:*:*)
  1243. +    echo mips-compaq-nonstopux
  1244. +    exit 0 ;;
  1245. +    BS2000:POSIX*:*:*)
  1246. +    echo bs2000-siemens-sysv
  1247. +    exit 0 ;;
  1248. +    DS/*:UNIX_System_V:*:*)
  1249. +    echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
  1250. +    exit 0 ;;
  1251. +    *:Plan9:*:*)
  1252. +    # "uname -m" is not consistent, so use $cputype instead. 386
  1253. +    # is converted to i386 for consistency with other x86
  1254. +    # operating systems.
  1255. +    if test "$cputype" = "386"; then
  1256. +        UNAME_MACHINE=i386
  1257. +    else
  1258. +        UNAME_MACHINE="$cputype"
  1259. +    fi
  1260. +    echo ${UNAME_MACHINE}-unknown-plan9
  1261. +    exit 0 ;;
  1262. +    i*86:OS/2:*:*)
  1263. +    # If we were able to find `uname', then EMX Unix compatibility
  1264. +    # is probably installed.
  1265. +    echo ${UNAME_MACHINE}-pc-os2-emx
  1266. +    exit 0 ;;
  1267. +    *:TOPS-10:*:*)
  1268. +    echo pdp10-unknown-tops10
  1269. +    exit 0 ;;
  1270. +    *:TENEX:*:*)
  1271. +    echo pdp10-unknown-tenex
  1272. +    exit 0 ;;
  1273. +    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
  1274. +    echo pdp10-dec-tops20
  1275. +    exit 0 ;;
  1276. +    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
  1277. +    echo pdp10-xkl-tops20
  1278. +    exit 0 ;;
  1279. +    *:TOPS-20:*:*)
  1280. +    echo pdp10-unknown-tops20
  1281. +    exit 0 ;;
  1282. +    *:ITS:*:*)
  1283. +    echo pdp10-unknown-its
  1284. +    exit 0 ;;
  1285. +    i*86:XTS-300:*:STOP)
  1286. +    echo ${UNAME_MACHINE}-unknown-stop
  1287. +    exit 0 ;;
  1288. +    i*86:atheos:*:*)
  1289. +    echo ${UNAME_MACHINE}-unknown-atheos
  1290. +    exit 0 ;;
  1291.  esac
  1292.  
  1293.  #echo '(No uname command or uname output not recognized.)' 1>&2
  1294.  #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
  1295.  
  1296. -cat >dummy.c <<EOF
  1297. +eval $set_cc_for_build
  1298. +cat >$dummy.c <<EOF
  1299.  #ifdef _SEQUENT_
  1300.  # include <sys/types.h>
  1301.  # include <sys/utsname.h>
  1302. @@ -917,7 +1169,10 @@
  1303.  #endif
  1304.    int version;
  1305.    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
  1306. +  if (version < 4)
  1307.    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
  1308. +  else
  1309. +    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
  1310.    exit (0);
  1311.  #endif
  1312.  
  1313. @@ -962,11 +1217,24 @@
  1314.  #endif
  1315.  
  1316.  #if defined (vax)
  1317. -#if !defined (ultrix)
  1318. +# if !defined (ultrix)
  1319. +#  include <sys/param.h>
  1320. +#  if defined (BSD)
  1321. +#   if BSD == 43
  1322. +      printf ("vax-dec-bsd4.3\n"); exit (0);
  1323. +#   else
  1324. +#    if BSD == 199006
  1325. +      printf ("vax-dec-bsd4.3reno\n"); exit (0);
  1326. +#    else
  1327.    printf ("vax-dec-bsd\n"); exit (0);
  1328. -#else
  1329. +#    endif
  1330. +#   endif
  1331. +#  else
  1332. +    printf ("vax-dec-bsd\n"); exit (0);
  1333. +#  endif
  1334. +# else
  1335.    printf ("vax-dec-ultrix\n"); exit (0);
  1336. -#endif
  1337. +# endif
  1338.  #endif
  1339.  
  1340.  #if defined (alliant) && defined (i860)
  1341. @@ -977,8 +1245,8 @@
  1342.  }
  1343.  EOF
  1344.  
  1345. -${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
  1346. -rm -f dummy.c dummy
  1347. +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
  1348. +rm -f $dummy.c $dummy
  1349.  
  1350.  # Apollos put the system type in the environment.
  1351.  
  1352. @@ -1010,6 +1278,48 @@
  1353.      esac
  1354.  fi
  1355.  
  1356. -#echo '(Unable to guess system type)' 1>&2
  1357. +cat >&2 <<EOF
  1358. +$0: unable to guess system type
  1359. +
  1360. +This script, last modified $timestamp, has failed to recognize
  1361. +the operating system you are using. It is advised that you
  1362. +download the most up to date version of the config scripts from
  1363. +
  1364. +    ftp://ftp.gnu.org/pub/gnu/config/
  1365. +
  1366. +If the version you run ($0) is already up to date, please
  1367. +send the following data and any information you think might be
  1368. +pertinent to <config-patches@gnu.org> in order to provide the needed
  1369. +information to handle your system.
  1370. +
  1371. +config.guess timestamp = $timestamp
  1372. +
  1373. +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  1374. +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  1375. +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  1376. +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  1377. +
  1378. +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
  1379. +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
  1380. +
  1381. +hostinfo               = `(hostinfo) 2>/dev/null`
  1382. +/bin/universe          = `(/bin/universe) 2>/dev/null`
  1383. +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
  1384. +/bin/arch              = `(/bin/arch) 2>/dev/null`
  1385. +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
  1386. +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
  1387. +
  1388. +UNAME_MACHINE = ${UNAME_MACHINE}
  1389. +UNAME_RELEASE = ${UNAME_RELEASE}
  1390. +UNAME_SYSTEM  = ${UNAME_SYSTEM}
  1391. +UNAME_VERSION = ${UNAME_VERSION}
  1392. +EOF
  1393.  
  1394.  exit 1
  1395. +
  1396. +# Local variables:
  1397. +# eval: (add-hook 'write-file-hooks 'time-stamp)
  1398. +# time-stamp-start: "timestamp='"
  1399. +# time-stamp-format: "%:y-%02m-%02d"
  1400. +# time-stamp-end: "'"
  1401. +# End:
  1402. diff -urNEBb gcc-2.95.3-orig/config.sub gcc-2.95.3/config.sub
  1403. --- gcc-2.95.3-orig/config.sub    1999-08-04 10:09:26.000000000 +0200
  1404. +++ gcc-2.95.3/config.sub    2003-12-02 17:50:54.000000000 +0100
  1405. @@ -1,6 +1,10 @@
  1406.  #! /bin/sh
  1407. -# Configuration validation subroutine script, version 1.1.
  1408. -#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
  1409. +# Configuration validation subroutine script.
  1410. +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  1411. +#   2000, 2001, 2002 Free Software Foundation, Inc.
  1412. +
  1413. +timestamp='2002-05-22'
  1414. +
  1415.  # This file is (in principle) common to ALL GNU software.
  1416.  # The presence of a machine in this file suggests that SOME GNU software
  1417.  # can handle that machine.  It does not imply ALL GNU software can.
  1418. @@ -25,6 +29,9 @@
  1419.  # configuration script generated by Autoconf, you may include it under
  1420.  # the same distribution terms that you use for the rest of that program.
  1421.  
  1422. +# Please send patches to <config-patches@gnu.org>.  Submit a context
  1423. +# diff and a properly formatted ChangeLog entry.
  1424. +#
  1425.  # Configuration subroutine to validate and canonicalize a configuration type.
  1426.  # Supply the specified configuration type as an argument.
  1427.  # If it is invalid, we print an error message on stderr and exit with code 1.
  1428. @@ -45,30 +52,73 @@
  1429.  #    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  1430.  # It is wrong to echo any other type of specification.
  1431.  
  1432. -if [ x$1 = x ]
  1433. -then
  1434. -    echo Configuration name missing. 1>&2
  1435. -    echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
  1436. -    echo "or     $0 ALIAS" 1>&2
  1437. -    echo where ALIAS is a recognized configuration type. 1>&2
  1438. -    exit 1
  1439. -fi
  1440. +me=`echo "$0" | sed -e 's,.*/,,'`
  1441. +
  1442. +usage="\
  1443. +Usage: $0 [OPTION] CPU-MFR-OPSYS
  1444. +       $0 [OPTION] ALIAS
  1445. +
  1446. +Canonicalize a configuration name.
  1447. +
  1448. +Operation modes:
  1449. +  -h, --help         print this help, then exit
  1450. +  -t, --time-stamp   print date of last modification, then exit
  1451. +  -v, --version      print version number, then exit
  1452. +
  1453. +Report bugs and patches to <config-patches@gnu.org>."
  1454. +
  1455. +version="\
  1456. +GNU config.sub ($timestamp)
  1457. +
  1458. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  1459. +Free Software Foundation, Inc.
  1460. +
  1461. +This is free software; see the source for copying conditions.  There is NO
  1462. +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  1463. +
  1464. +help="
  1465. +Try \`$me --help' for more information."
  1466. +
  1467. +# Parse command line
  1468. +while test $# -gt 0 ; do
  1469. +  case $1 in
  1470. +    --time-stamp | --time* | -t )
  1471. +       echo "$timestamp" ; exit 0 ;;
  1472. +    --version | -v )
  1473. +       echo "$version" ; exit 0 ;;
  1474. +    --help | --h* | -h )
  1475. +       echo "$usage"; exit 0 ;;
  1476. +    -- )     # Stop option processing
  1477. +       shift; break ;;
  1478. +    - )    # Use stdin as input.
  1479. +       break ;;
  1480. +    -* )
  1481. +       echo "$me: invalid option $1$help"
  1482. +       exit 1 ;;
  1483.  
  1484. -# First pass through any local machine types.
  1485. -case $1 in
  1486.      *local*)
  1487. +       # First pass through any local machine types.
  1488.          echo $1
  1489. -        exit 0
  1490. -        ;;
  1491. -    *)
  1492. -    ;;
  1493. +       exit 0;;
  1494. +
  1495. +    * )
  1496. +       break ;;
  1497. +  esac
  1498. +done
  1499. +
  1500. +case $# in
  1501. + 0) echo "$me: missing argument$help" >&2
  1502. +    exit 1;;
  1503. + 1) ;;
  1504. + *) echo "$me: too many arguments$help" >&2
  1505. +    exit 1;;
  1506.  esac
  1507.  
  1508.  # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  1509.  # Here we must recognize all the valid KERNEL-OS combinations.
  1510.  maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  1511.  case $maybe_os in
  1512. -  linux-gnu*)
  1513. +  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
  1514.      os=-$maybe_os
  1515.      basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
  1516.      ;;
  1517. @@ -94,20 +144,28 @@
  1518.      -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  1519.      -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  1520.      -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  1521. -    -apple)
  1522. +    -apple | -axis)
  1523.          os=
  1524.          basic_machine=$1
  1525.          ;;
  1526. -    -sim | -cisco | -oki | -wec | -winbond )    # EGCS LOCAL
  1527. +    -sim | -cisco | -oki | -wec | -winbond)
  1528.          os=
  1529.          basic_machine=$1
  1530.          ;;
  1531. -    -scout)                        # EGCS LOCAL
  1532. +    -scout)
  1533.          ;;
  1534. -    -wrs)                        # EGCS LOCAL
  1535. +    -wrs)
  1536.          os=-vxworks
  1537.          basic_machine=$1
  1538.          ;;
  1539. +    -chorusos*)
  1540. +        os=-chorusos
  1541. +        basic_machine=$1
  1542. +        ;;
  1543. +     -chorusrdb)
  1544. +         os=-chorusrdb
  1545. +        basic_machine=$1
  1546. +         ;;
  1547.      -hiux*)
  1548.          os=-hiuxwe2
  1549.          ;;
  1550. @@ -156,45 +214,56 @@
  1551.      -psos*)
  1552.          os=-psos
  1553.          ;;
  1554. +    -mint | -mint[0-9]*)
  1555. +        basic_machine=m68k-atari
  1556. +        os=-mint
  1557. +        ;;
  1558.  esac
  1559.  
  1560.  # Decode aliases for certain CPU-COMPANY combinations.
  1561.  case $basic_machine in
  1562.      # Recognize the basic CPU types without company name.
  1563.      # Some are omitted here because they have special meanings below.
  1564. -    tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
  1565. -        | arme[lb] | pyramid | mn10200 | mn10300 \
  1566. -        | tron | a29k | 580 | i960 | h8300 \
  1567. -        | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
  1568. -        | alpha | alphaev5 | alphaev56 | alphapca56 | alphaev6 \
  1569. -        | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
  1570. -        | 1750a | dsp16xx | pdp11 \
  1571. -        | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
  1572. -        | mipstx39 | mipstx39el \
  1573. -        | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x)
  1574. -        basic_machine=$basic_machine-unknown
  1575. -        ;;
  1576. -    m88110 | m680[012346]0 | m683?2 | m68360 | m5200 | z8k | v70 \
  1577. -            | h8500 | w65) # EGCS LOCAL
  1578. -        ;;
  1579. -    thumb)
  1580. +    1750a | 580 \
  1581. +    | a29k \
  1582. +    | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
  1583. +    | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
  1584. +    | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
  1585. +    | c4x | clipper \
  1586. +    | d10v | d30v | dlx | dsp16xx \
  1587. +    | fr30 | frv \
  1588. +    | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  1589. +    | i370 | i860 | i960 | ia64 \
  1590. +    | m32r | m68000 | m68k | m88k | mcore \
  1591. +    | mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
  1592. +    | mips64vr4100 | mips64vr4100el | mips64vr4300 \
  1593. +    | mips64vr4300el | mips64vr5000 | mips64vr5000el \
  1594. +    | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
  1595. +    | mipsisa32 | mipsisa64 \
  1596. +    | mn10200 | mn10300 \
  1597. +    | ns16k | ns32k \
  1598. +    | openrisc | or32 \
  1599. +    | pdp10 | pdp11 | pj | pjl \
  1600. +    | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
  1601. +    | pyramid \
  1602. +    | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \
  1603. +    | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
  1604. +    | strongarm \
  1605. +    | tahoe | thumb | tic80 | tron \
  1606. +    | v850 | v850e \
  1607. +    | we32k \
  1608. +    | x86 | xscale | xstormy16 | xtensa \
  1609. +    | z8k)
  1610.          basic_machine=$basic_machine-unknown
  1611.          ;;
  1612. -    mips64vr4300 | mips64vr4300el) # EGCS LOCAL jsmith/vr4300
  1613. -        basic_machine=$basic_machine-unknown
  1614. -        ;;
  1615. -    mips64vr4100 | mips64vr4100el) # EGCS LOCAL jsmith/vr4100
  1616. -        basic_machine=$basic_machine-unknown
  1617. -        ;;
  1618. -    mips64vr5000 | mips64vr5000el) # EGCS LOCAL ian/vr5000
  1619. -        basic_machine=$basic_machine-unknown
  1620. -        ;;
  1621. -    mips16)
  1622. +    m6811 | m68hc11 | m6812 | m68hc12)
  1623. +        # Motorola 68HC11/12.
  1624.          basic_machine=$basic_machine-unknown
  1625. +        os=-none
  1626.          ;;
  1627. -    d10v)
  1628. -        basic_machine=$basic_machine-unknown
  1629. +    m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
  1630.          ;;
  1631. +
  1632.      # We use `pc' rather than `unknown'
  1633.      # because (1) that's what they normally are, and
  1634.      # (2) the word "unknown" tends to confuse beginning users.
  1635. @@ -198,7 +267,7 @@
  1636.      # We use `pc' rather than `unknown'
  1637.      # because (1) that's what they normally are, and
  1638.      # (2) the word "unknown" tends to confuse beginning users.
  1639. -    i[34567]86)
  1640. +    i*86 | x86_64)
  1641.        basic_machine=$basic_machine-pc
  1642.        ;;
  1643.      # Object if more than one company name word.
  1644. @@ -207,44 +276,49 @@
  1645.          exit 1
  1646.          ;;
  1647.      # Recognize the basic CPU types with company name.
  1648. -    vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
  1649. -          | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
  1650. -          | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
  1651. -          | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
  1652. -          | xmp-* | ymp-* \
  1653. -          | hppa-* | hppa1.0-* | hppa1.1-* \
  1654. -          | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
  1655. -          | alpha-* | alphaev5-* | alphaev56-* | alphapca56-* \
  1656. -          | alphaev6-* | we32k-* | cydra-* | ns16k-* | pn-* | np1-* \
  1657. -          | xps100-* | clipper-* | orion-* \
  1658. -          | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
  1659. -          | sparc64-* | sparcv9-* | sparc86x-* | mips64-* | mipsel-* \
  1660. -          | mips64el-* | mips64orion-* | mips64orionel-*  \
  1661. -          | mipstx39-* | mipstx39el-* \
  1662. -          | f301-* | arm*-*)
  1663. -        ;;
  1664. -    m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | h8500-* | d10v-*) # EGCS LOCAL
  1665. -        ;;
  1666. -    thumb-*) # EGCS LOCAL angela/thumb
  1667. -        ;;
  1668. -    v850-*) # EGCS LOCAL
  1669. -            ;;
  1670. -    d30v-*) # EGCS LOCAL
  1671. -            ;;
  1672. -    mips64vr4300-* | mips64vr4300el-*) # EGCS LOCAL jsmith/vr4300
  1673. -        ;;
  1674. -    mips64vr4100-* | mips64vr4100el-*) # EGCS LOCAL jsmith/vr4100
  1675. -        ;;
  1676. -    mips16-*) # EGCS LOCAL krk/mips16
  1677. -        ;;
  1678. -    tic30-*) # EGCS LOCAL ian/tic30
  1679. -        ;;
  1680. -    c30-*) # EGCS LOCAL ian/tic30
  1681. -        basic_machine=tic30-unknown
  1682. +    580-* \
  1683. +    | a29k-* \
  1684. +    | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
  1685. +    | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
  1686. +    | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
  1687. +    | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
  1688. +    | avr-* \
  1689. +    | bs2000-* \
  1690. +    | c[123]* | c30-* | [cjt]90-* | c54x-* \
  1691. +    | clipper-* | cydra-* \
  1692. +    | d10v-* | d30v-* | dlx-* \
  1693. +    | elxsi-* \
  1694. +    | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
  1695. +    | h8300-* | h8500-* \
  1696. +    | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  1697. +    | i*86-* | i860-* | i960-* | ia64-* \
  1698. +    | m32r-* \
  1699. +    | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
  1700. +    | m88110-* | m88k-* | mcore-* \
  1701. +    | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
  1702. +    | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
  1703. +    | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
  1704. +    | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
  1705. +    | none-* | np1-* | ns16k-* | ns32k-* \
  1706. +    | orion-* \
  1707. +    | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  1708. +    | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
  1709. +    | pyramid-* \
  1710. +    | romp-* | rs6000-* \
  1711. +    | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \
  1712. +    | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
  1713. +    | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
  1714. +    | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
  1715. +    | v850-* | v850e-* | vax-* \
  1716. +    | we32k-* \
  1717. +    | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
  1718. +    | xtensa-* \
  1719. +    | ymp-* \
  1720. +    | z8k-*)
  1721.          ;;
  1722.      # Recognize the various machine names and aliases which stand
  1723.      # for a CPU type and a company and sometimes even an OS.
  1724. -    386bsd)                        # EGCS LOCAL
  1725. +    386bsd)
  1726.          basic_machine=i386-unknown
  1727.          os=-bsd
  1728.          ;;
  1729. @@ -254,11 +328,11 @@
  1730.      3b*)
  1731.          basic_machine=we32k-att
  1732.          ;;
  1733. -    a29khif)                    # EGCS LOCAL
  1734. +    a29khif)
  1735.          basic_machine=a29k-amd
  1736.          os=-udi
  1737.          ;;
  1738. -    adobe68k)                    # EGCS LOCAL
  1739. +    adobe68k)
  1740.          basic_machine=m68010-adobe
  1741.          os=-scout
  1742.          ;;
  1743. @@ -276,22 +350,19 @@
  1744.          basic_machine=580-amdahl
  1745.          os=-sysv
  1746.          ;;
  1747. -    amiga | amiga-*)
  1748. -        basic_machine=m68k-cbm
  1749. -        ;;
  1750. -    amigaos | amigados)
  1751. -        basic_machine=m68k-cbm
  1752. +    amiga | amigaos | amigados)
  1753. +        basic_machine=powerpc-unknown
  1754.          os=-amigaos
  1755.          ;;
  1756.      amigaunix | amix)
  1757. -        basic_machine=m68k-cbm
  1758. +        basic_machine=m68k-unknown
  1759.          os=-sysv4
  1760.          ;;
  1761.      apollo68)
  1762.          basic_machine=m68k-apollo
  1763.          os=-sysv
  1764.          ;;
  1765. -    apollo68bsd)                    # EGCS LOCAL
  1766. +    apollo68bsd)
  1767.          basic_machine=m68k-apollo
  1768.          os=-bsd
  1769.          ;;
  1770. @@ -303,6 +374,10 @@
  1771.          basic_machine=ns32k-sequent
  1772.          os=-dynix
  1773.          ;;
  1774. +    c90)
  1775. +        basic_machine=c90-cray
  1776. +        os=-unicos
  1777. +        ;;
  1778.      convex-c1)
  1779.          basic_machine=c1-convex
  1780.          os=-bsd
  1781. @@ -323,27 +398,30 @@
  1782.          basic_machine=c38-convex
  1783.          os=-bsd
  1784.          ;;
  1785. -    cray | ymp)
  1786. -        basic_machine=ymp-cray
  1787. -        os=-unicos
  1788. -        ;;
  1789. -    cray2)
  1790. -        basic_machine=cray2-cray
  1791. -        os=-unicos
  1792. -        ;;
  1793. -    [ctj]90-cray)
  1794. -        basic_machine=c90-cray
  1795. +    cray | j90)
  1796. +        basic_machine=j90-cray
  1797.          os=-unicos
  1798.          ;;
  1799.      crds | unos)
  1800.          basic_machine=m68k-crds
  1801.          ;;
  1802. +    cris | cris-* | etrax*)
  1803. +        basic_machine=cris-axis
  1804. +        ;;
  1805.      da30 | da30-*)
  1806.          basic_machine=m68k-da30
  1807.          ;;
  1808.      decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  1809.          basic_machine=mips-dec
  1810.          ;;
  1811. +    decsystem10* | dec10*)
  1812. +        basic_machine=pdp10-dec
  1813. +        os=-tops10
  1814. +        ;;
  1815. +    decsystem20* | dec20*)
  1816. +        basic_machine=pdp10-dec
  1817. +        os=-tops20
  1818. +        ;;
  1819.      delta | 3300 | motorola-3300 | motorola-delta \
  1820.            | 3300-motorola | delta-motorola)
  1821.          basic_machine=m68k-motorola
  1822. @@ -371,7 +449,7 @@
  1823.      encore | umax | mmax)
  1824.          basic_machine=ns32k-encore
  1825.          ;;
  1826. -    es1800 | OSE68k | ose68k | ose | OSE)        # EGCS LOCAL
  1827. +    es1800 | OSE68k | ose68k | ose | OSE)
  1828.          basic_machine=m68k-ericsson
  1829.          os=-ose
  1830.          ;;
  1831. @@ -385,6 +463,10 @@
  1832.          basic_machine=tron-gmicro
  1833.          os=-sysv
  1834.          ;;
  1835. +    go32)
  1836. +        basic_machine=i386-pc
  1837. +        os=-go32
  1838. +        ;;
  1839.      h3050r* | hiux*)
  1840.          basic_machine=hppa1.1-hitachi
  1841.          os=-hiuxwe2
  1842. @@ -393,11 +475,11 @@
  1843.          basic_machine=h8300-hitachi
  1844.          os=-hms
  1845.          ;;
  1846. -    h8300xray)                    # EGCS LOCAL
  1847. +    h8300xray)
  1848.          basic_machine=h8300-hitachi
  1849.          os=-xray
  1850.          ;;
  1851. -    h8500hms)                    # EGCS LOCAL
  1852. +    h8500hms)
  1853.          basic_machine=h8500-hitachi
  1854.          os=-hms
  1855.          ;;
  1856. @@ -416,22 +498,6 @@
  1857.          basic_machine=m68k-hp
  1858.          os=-hpux
  1859.          ;;
  1860. -        w89k-*)                        # EGCS LOCAL
  1861. -                basic_machine=hppa1.1-winbond
  1862. -                os=-proelf
  1863. -                ;;
  1864. -        op50n-*)                    # EGCS LOCAL
  1865. -                basic_machine=hppa1.1-oki
  1866. -                os=-proelf
  1867. -                ;;
  1868. -        op60c-*)                    # EGCS LOCAL
  1869. -                basic_machine=hppa1.1-oki
  1870. -                os=-proelf
  1871. -                ;;
  1872. -        hppro)                        # EGCS LOCAL
  1873. -                basic_machine=hppa1.1-hp
  1874. -                os=-proelf
  1875. -                ;;
  1876.      hp3k9[0-9][0-9] | hp9[0-9][0-9])
  1877.          basic_machine=hppa1.0-hp
  1878.          ;;
  1879. @@ -441,22 +507,21 @@
  1880.      hp9k3[2-9][0-9])
  1881.          basic_machine=m68k-hp
  1882.          ;;
  1883. -    hp9k6[0-9][0-9] | hp6[0-9][0-9] )
  1884. +    hp9k6[0-9][0-9] | hp6[0-9][0-9])
  1885.          basic_machine=hppa1.0-hp
  1886.          ;;
  1887. -    hp9k7[0-79][0-9] | hp7[0-79][0-9] )
  1888. +    hp9k7[0-79][0-9] | hp7[0-79][0-9])
  1889.          basic_machine=hppa1.1-hp
  1890.          ;;
  1891. -    hp9k78[0-9] | hp78[0-9] )
  1892. +    hp9k78[0-9] | hp78[0-9])
  1893.          # FIXME: really hppa2.0-hp
  1894.          basic_machine=hppa1.1-hp
  1895.          ;;
  1896. -    hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | \
  1897. -    hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893 )
  1898. +    hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  1899.          # FIXME: really hppa2.0-hp
  1900.          basic_machine=hppa1.1-hp
  1901.          ;;
  1902. -    hp9k8[0-9][13679] | hp8[0-9][13679] )
  1903. +    hp9k8[0-9][13679] | hp8[0-9][13679])
  1904.          basic_machine=hppa1.1-hp
  1905.          ;;
  1906.      hp9k8[0-9][0-9] | hp8[0-9][0-9])
  1907. @@ -465,47 +530,42 @@
  1908.      hppa-next)
  1909.          os=-nextstep3
  1910.          ;;
  1911. -    hppaosf)                    # EGCS LOCAL
  1912. +    hppaosf)
  1913.          basic_machine=hppa1.1-hp
  1914.          os=-osf
  1915.          ;;
  1916. +    hppro)
  1917. +        basic_machine=hppa1.1-hp
  1918. +        os=-proelf
  1919. +        ;;
  1920.      i370-ibm* | ibm*)
  1921.          basic_machine=i370-ibm
  1922. -        os=-mvs
  1923.          ;;
  1924.  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  1925. -    i[34567]86v32)
  1926. +    i*86v32)
  1927.          basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  1928.          os=-sysv32
  1929.          ;;
  1930. -    i[34567]86v4*)
  1931. +    i*86v4*)
  1932.          basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  1933.          os=-sysv4
  1934.          ;;
  1935. -    i[34567]86v)
  1936. +    i*86v)
  1937.          basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  1938.          os=-sysv
  1939.          ;;
  1940. -    i[34567]86sol2)
  1941. +    i*86sol2)
  1942.          basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  1943.          os=-solaris2
  1944.          ;;
  1945. -    i386mach)                    # EGCS LOCAL
  1946. +    i386mach)
  1947.          basic_machine=i386-mach
  1948.          os=-mach
  1949.          ;;
  1950. -    i386-vsta | vsta)                # EGCS LOCAL
  1951. +    i386-vsta | vsta)
  1952.          basic_machine=i386-unknown
  1953.          os=-vsta
  1954.          ;;
  1955. -    i386-go32 | go32)                # EGCS LOCAL
  1956. -        basic_machine=i386-unknown
  1957. -        os=-go32
  1958. -        ;;
  1959. -    i386-mingw32 | mingw32)
  1960. -        basic_machine=i386-unknown
  1961. -        os=-mingw32
  1962. -        ;;
  1963.      iris | iris4d)
  1964.          basic_machine=mips-sgi
  1965.          case $os in
  1966. @@ -531,16 +591,16 @@
  1967.          basic_machine=ns32k-utek
  1968.          os=-sysv
  1969.          ;;
  1970. +    mingw32)
  1971. +        basic_machine=i386-pc
  1972. +        os=-mingw32
  1973. +        ;;
  1974.      miniframe)
  1975.          basic_machine=m68000-convergent
  1976.          ;;
  1977. -    mipsel*-linux*)
  1978. -        basic_machine=mipsel-unknown
  1979. -        os=-linux-gnu
  1980. -        ;;
  1981. -    mips*-linux*)
  1982. -        basic_machine=mips-unknown
  1983. -        os=-linux-gnu
  1984. +    *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  1985. +        basic_machine=m68k-atari
  1986. +        os=-mint
  1987.          ;;
  1988.      mips3*-*)
  1989.          basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  1990. @@ -548,24 +608,36 @@
  1991.      mips3*)
  1992.          basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  1993.          ;;
  1994. -    monitor)                    # EGCS LOCAL
  1995. +    mmix*)
  1996. +        basic_machine=mmix-knuth
  1997. +        os=-mmixware
  1998. +        ;;
  1999. +    monitor)
  2000.          basic_machine=m68k-rom68k
  2001.          os=-coff
  2002.          ;;
  2003. -    msdos)                        # EGCS LOCAL
  2004. -        basic_machine=i386-unknown    
  2005. +    morphos)
  2006. +        basic_machine=powerpc-unknown
  2007. +        os=-morphos
  2008. +        ;;
  2009. +    msdos)
  2010. +        basic_machine=i386-pc
  2011.          os=-msdos
  2012.          ;;
  2013. +    mvs)
  2014. +        basic_machine=i370-ibm
  2015. +        os=-mvs
  2016. +        ;;
  2017.      ncr3000)
  2018.          basic_machine=i486-ncr
  2019.          os=-sysv4
  2020.          ;;
  2021.      netbsd386)
  2022. -        basic_machine=i386-unknown        # EGCS LOCAL
  2023. +        basic_machine=i386-unknown
  2024.          os=-netbsd
  2025.          ;;
  2026.      netwinder)
  2027. -        basic_machine=armv4l-corel
  2028. +        basic_machine=armv4l-rebel
  2029.          os=-linux
  2030.          ;;
  2031.      news | news700 | news800 | news900)
  2032. @@ -580,7 +652,7 @@
  2033.          basic_machine=mips-sony
  2034.          os=-newsos
  2035.          ;;
  2036. -    necv70)                        # EGCS LOCAL
  2037. +    necv70)
  2038.          basic_machine=v70-nec
  2039.          os=-sysv
  2040.          ;;
  2041. @@ -609,18 +681,33 @@
  2042.          basic_machine=i960-intel
  2043.          os=-nindy
  2044.          ;;
  2045. -    mon960)                        # EGCS LOCAL
  2046. +    mon960)
  2047.          basic_machine=i960-intel
  2048.          os=-mon960
  2049.          ;;
  2050. +    nonstopux)
  2051. +        basic_machine=mips-compaq
  2052. +        os=-nonstopux
  2053. +        ;;
  2054.      np1)
  2055.          basic_machine=np1-gould
  2056.          ;;
  2057. -    OSE68000 | ose68000)                # EGCS LOCAL
  2058. +    nsr-tandem)
  2059. +        basic_machine=nsr-tandem
  2060. +        ;;
  2061. +    op50n-* | op60c-*)
  2062. +        basic_machine=hppa1.1-oki
  2063. +        os=-proelf
  2064. +        ;;
  2065. +    or32 | or32-*)
  2066. +        basic_machine=or32-unknown
  2067. +        os=-coff
  2068. +        ;;
  2069. +    OSE68000 | ose68000)
  2070.          basic_machine=m68000-ericsson
  2071.          os=-ose
  2072.          ;;
  2073. -    os68k)                        # EGCS LOCAL
  2074. +    os68k)
  2075.          basic_machine=m68k-none
  2076.          os=-os68k
  2077.          ;;
  2078. @@ -641,28 +728,28 @@
  2079.          pc532 | pc532-*)
  2080.          basic_machine=ns32k-pc532
  2081.          ;;
  2082. -    pentium | p5 | k5 | k6 | nexen)
  2083. +    pentium | p5 | k5 | k6 | nexgen | viac3)
  2084.          basic_machine=i586-pc
  2085.          ;;
  2086. -    pentiumpro | p6 | 6x86)
  2087. +    pentiumpro | p6 | 6x86 | athlon)
  2088.          basic_machine=i686-pc
  2089.          ;;
  2090.      pentiumii | pentium2)
  2091. -        basic_machine=i786-pc
  2092. +        basic_machine=i686-pc
  2093.          ;;
  2094. -    pentium-* | p5-* | k5-* | k6-* | nexen-*)
  2095. +    pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
  2096.          basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  2097.          ;;
  2098. -    pentiumpro-* | p6-* | 6x86-*)
  2099. +    pentiumpro-* | p6-* | 6x86-* | athlon-*)
  2100.          basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  2101.          ;;
  2102.      pentiumii-* | pentium2-*)
  2103. -        basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
  2104. +        basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  2105.          ;;
  2106.      pn)
  2107.          basic_machine=pn-gould
  2108.          ;;
  2109. -    power)    basic_machine=rs6000-ibm
  2110. +    power)    basic_machine=power-ibm
  2111.          ;;
  2112.      ppc)    basic_machine=powerpc-unknown
  2113.              ;;
  2114. @@ -674,10 +761,24 @@
  2115.      ppcle-* | powerpclittle-*)
  2116.          basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  2117.          ;;
  2118. +    ppc64)    basic_machine=powerpc64-unknown
  2119. +            ;;
  2120. +    ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
  2121. +        ;;
  2122. +    ppc64le | powerpc64little | ppc64-le | powerpc64-little)
  2123. +        basic_machine=powerpc64le-unknown
  2124. +            ;;
  2125. +    ppc64le-* | powerpc64little-*)
  2126. +        basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
  2127. +        ;;
  2128.      ps2)
  2129.          basic_machine=i386-ibm
  2130.          ;;
  2131. -    rom68k)                        # EGCS LOCAL
  2132. +    pw32)
  2133. +        basic_machine=i586-unknown
  2134. +        os=-pw32
  2135. +        ;;
  2136. +    rom68k)
  2137.          basic_machine=m68k-rom68k
  2138.          os=-coff
  2139.          ;;
  2140. @@ -687,7 +788,13 @@
  2141.      rtpc | rtpc-*)
  2142.          basic_machine=romp-ibm
  2143.          ;;
  2144. -    sa29200)                    # EGCS LOCAL
  2145. +    s390 | s390-*)
  2146. +        basic_machine=s390-ibm
  2147. +        ;;
  2148. +    s390x | s390x-*)
  2149. +        basic_machine=s390x-ibm
  2150. +        ;;
  2151. +    sa29200)
  2152.          basic_machine=a29k-amd
  2153.          os=-udi
  2154.          ;;
  2155. @@ -698,7 +805,7 @@
  2156.          basic_machine=sh-hitachi
  2157.          os=-hms
  2158.          ;;
  2159. -    sparclite-wrs)                    # EGCS LOCAL
  2160. +    sparclite-wrs | simso-wrs)
  2161.          basic_machine=sparclite-wrs
  2162.          os=-vxworks
  2163.          ;;
  2164. @@ -709,10 +816,10 @@
  2165.      spur)
  2166.          basic_machine=spur-unknown
  2167.          ;;
  2168. -    st2000)                        # EGCS LOCAL
  2169. +    st2000)
  2170.          basic_machine=m68k-tandem
  2171.          ;;
  2172. -    stratus)                    # EGCS LOCAL
  2173. +    stratus)
  2174.          basic_machine=i860-stratus
  2175.          os=-sysv4
  2176.          ;;
  2177. @@ -756,16 +863,40 @@
  2178.      sun386 | sun386i | roadrunner)
  2179.          basic_machine=i386-sun
  2180.          ;;
  2181. +        sv1)
  2182. +        basic_machine=sv1-cray
  2183. +        os=-unicos
  2184. +        ;;
  2185.      symmetry)
  2186.          basic_machine=i386-sequent
  2187.          os=-dynix
  2188.          ;;
  2189. +    t3d)
  2190. +        basic_machine=alpha-cray
  2191. +        os=-unicos
  2192. +        ;;
  2193. +    t3e)
  2194. +        basic_machine=alphaev5-cray
  2195. +        os=-unicos
  2196. +        ;;
  2197. +    t90)
  2198. +        basic_machine=t90-cray
  2199. +        os=-unicos
  2200. +        ;;
  2201. +    tic54x | c54x*)
  2202. +        basic_machine=tic54x-unknown
  2203. +        os=-coff
  2204. +        ;;
  2205.      tx39)
  2206.          basic_machine=mipstx39-unknown
  2207.          ;;
  2208.      tx39el)
  2209.          basic_machine=mipstx39el-unknown
  2210.          ;;
  2211. +    toad1)
  2212. +        basic_machine=pdp10-xkl
  2213. +        os=-tops20
  2214. +        ;;
  2215.      tower | tower-32)
  2216.          basic_machine=m68k-ncr
  2217.          ;;
  2218. @@ -777,7 +908,7 @@
  2219.          basic_machine=a29k-nyu
  2220.          os=-sym1
  2221.          ;;
  2222. -    v810 | necv810)                    # EGCS LOCAL
  2223. +    v810 | necv810)
  2224.          basic_machine=v810-nec
  2225.          os=-none
  2226.          ;;
  2227. @@ -804,18 +935,26 @@
  2228.          basic_machine=a29k-wrs
  2229.          os=-vxworks
  2230.          ;;
  2231. -    w65*)                        # EGCS LOCAL
  2232. +    w65*)
  2233.           basic_machine=w65-wdc
  2234.           os=-none
  2235.          ;;
  2236. -    xmp)
  2237. -        basic_machine=xmp-cray
  2238. -        os=-unicos
  2239. +    w89k-*)
  2240. +        basic_machine=hppa1.1-winbond
  2241. +        os=-proelf
  2242. +        ;;
  2243. +    windows32)
  2244. +        basic_machine=i386-pc
  2245. +        os=-windows32-msvcrt
  2246.          ;;
  2247.          xps | xps100)
  2248.          basic_machine=xps100-honeywell
  2249.          ;;
  2250. -    z8k-*-coff)                    # EGCS LOCAL
  2251. +    ymp)
  2252. +        basic_machine=ymp-cray
  2253. +        os=-unicos
  2254. +        ;;
  2255. +    z8k-*-coff)
  2256.          basic_machine=z8k-unknown
  2257.          os=-sim
  2258.          ;;
  2259. @@ -826,22 +965,15 @@
  2260.  
  2261.  # Here we handle the default manufacturer of certain CPU types.  It is in
  2262.  # some cases the only manufacturer, in others, it is the most popular.
  2263. -    w89k)                        # EGCS LOCAL
  2264. +    w89k)
  2265.          basic_machine=hppa1.1-winbond
  2266.          ;;
  2267. -    op50n)                        # EGCS LOCAL
  2268. +    op50n)
  2269.          basic_machine=hppa1.1-oki
  2270.          ;;
  2271. -    op60c)                        # EGCS LOCAL
  2272. +    op60c)
  2273.          basic_machine=hppa1.1-oki
  2274.          ;;
  2275. -    mips)
  2276. -        if [ x$os = x-linux-gnu ]; then
  2277. -            basic_machine=mips-unknown
  2278. -        else
  2279. -            basic_machine=mips-mips
  2280. -        fi
  2281. -        ;;
  2282.      romp)
  2283.          basic_machine=romp-ibm
  2284.          ;;
  2285. @@ -851,13 +983,23 @@
  2286.      vax)
  2287.          basic_machine=vax-dec
  2288.          ;;
  2289. +    pdp10)
  2290. +        # there are many clones, so DEC is not a safe bet
  2291. +        basic_machine=pdp10-unknown
  2292. +        ;;
  2293.      pdp11)
  2294.          basic_machine=pdp11-dec
  2295.          ;;
  2296.      we32k)
  2297.          basic_machine=we32k-att
  2298.          ;;
  2299. -    sparc | sparcv9)
  2300. +    sh3 | sh4 | sh3eb | sh4eb)
  2301. +        basic_machine=sh-unknown
  2302. +        ;;
  2303. +    sh64)
  2304. +        basic_machine=sh64-unknown
  2305. +        ;;
  2306. +    sparc | sparcv9 | sparcv9b)
  2307.          basic_machine=sparc-sun
  2308.          ;;
  2309.          cydra)
  2310. @@ -869,16 +1011,19 @@
  2311.      orion105)
  2312.          basic_machine=clipper-highlevel
  2313.          ;;
  2314. -    mac | mpw | mac-mpw)                # EGCS LOCAL
  2315. +    mac | mpw | mac-mpw)
  2316.          basic_machine=m68k-apple
  2317.          ;;
  2318. -    pmac | pmac-mpw)                # EGCS LOCAL
  2319. +    pmac | pmac-mpw)
  2320.          basic_machine=powerpc-apple
  2321.          ;;
  2322.       c4x*)
  2323.           basic_machine=c4x-none
  2324.           os=-coff
  2325.            ;;
  2326. +    *-unknown)
  2327. +        # Make sure to match an already-canonicalized machine name.
  2328. +        ;;
  2329.      *)
  2330.          echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  2331.          exit 1
  2332. @@ -935,20 +1080,35 @@
  2333.            | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
  2334.            | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
  2335.            | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
  2336. +          | -chorusos* | -chorusrdb* \
  2337.            | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
  2338.            | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
  2339. -          | -interix* | -uwin* )
  2340. +          | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
  2341. +          | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
  2342. +          | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
  2343. +          | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
  2344. +          | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*)
  2345.      # Remember, each alternative MUST END IN *, to match a version number.
  2346.          ;;
  2347. -    # EGCS LOCAL
  2348. +    -qnx*)
  2349. +        case $basic_machine in
  2350. +            x86-* | i*86-*)
  2351. +            ;;
  2352. +            *)
  2353. +            os=-nto$os
  2354. +            ;;
  2355. +        esac
  2356. +        ;;
  2357. +    -nto*)
  2358. +        os=-nto-qnx
  2359. +        ;;
  2360.      -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
  2361.            | -windows* | -osx | -abug |  -netware* | -os9* | -beos* \
  2362. -          | -macos* | -mpw* | -magic* | -mon960* | -lnews* )
  2363. +          | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
  2364.          ;;
  2365.      -mac*)
  2366.          os=`echo $os | sed -e 's|mac|macos|'`
  2367.          ;;
  2368. -    # END EGCS LOCAL
  2369.      -linux*)
  2370.          os=`echo $os | sed -e 's|linux|linux-gnu|'`
  2371.          ;;
  2372. @@ -958,6 +1118,12 @@
  2373.      -sunos6*)
  2374.          os=`echo $os | sed -e 's|sunos6|solaris3|'`
  2375.          ;;
  2376. +    -opened*)
  2377. +        os=-openedition
  2378. +        ;;
  2379. +    -wince*)
  2380. +        os=-wince
  2381. +        ;;
  2382.      -osfrose*)
  2383.          os=-osfrose
  2384.          ;;
  2385. @@ -973,15 +1139,24 @@
  2386.      -acis*)
  2387.          os=-aos
  2388.          ;;
  2389. -    -386bsd)                    # EGCS LOCAL
  2390. +    -atheos*)
  2391. +        os=-atheos
  2392. +        ;;
  2393. +    -386bsd)
  2394.          os=-bsd
  2395.          ;;
  2396.      -ctix* | -uts*)
  2397.          os=-sysv
  2398.          ;;
  2399. +    -nova*)
  2400. +        os=-rtmk-nova
  2401. +        ;;
  2402.      -ns2 )
  2403.              os=-nextstep2
  2404.          ;;
  2405. +    -nsk*)
  2406. +        os=-nsk
  2407. +        ;;
  2408.      # Preserve the version number of sinix5.
  2409.      -sinix5.*)
  2410.          os=`echo $os | sed -e 's|sinix|sysv|'`
  2411. @@ -1007,15 +1182,18 @@
  2412.      # This must come after -sysvr4.
  2413.      -sysv*)
  2414.          ;;
  2415. -    -ose*)                        # EGCS LOCAL
  2416. +    -ose*)
  2417.          os=-ose
  2418.          ;;
  2419. -    -es1800*)                    # EGCS LOCAL
  2420. +    -es1800*)
  2421.          os=-ose
  2422.          ;;
  2423.      -xenix)
  2424.          os=-xenix
  2425.          ;;
  2426. +        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  2427. +            os=-mint
  2428. +        ;;
  2429.      -none)
  2430.          ;;
  2431.      *)
  2432. @@ -1041,12 +1219,16 @@
  2433.      *-acorn)
  2434.          os=-riscix1.2
  2435.          ;;
  2436. -    arm*-corel)
  2437. +    arm*-rebel)
  2438.          os=-linux
  2439.          ;;
  2440.      arm*-semi)
  2441.          os=-aout
  2442.          ;;
  2443. +    # This must come before the *-dec entry.
  2444. +    pdp10-*)
  2445. +        os=-tops20
  2446. +        ;;
  2447.          pdp11-*)
  2448.          os=-none
  2449.          ;;
  2450. @@ -1065,15 +1247,18 @@
  2451.          # default.
  2452.          # os=-sunos4
  2453.          ;;
  2454. -    m68*-cisco)                    # EGCS LOCAL
  2455. +    m68*-cisco)
  2456.          os=-aout
  2457.          ;;
  2458. -    mips*-cisco)                    # EGCS LOCAL
  2459. +    mips*-cisco)
  2460.          os=-elf
  2461.          ;;
  2462. -        mips*-*)                                        # EGCS LOCAL
  2463. +    mips*-*)
  2464.                  os=-elf
  2465.                  ;;
  2466. +    or32-*)
  2467. +        os=-coff
  2468. +        ;;
  2469.      *-tti)    # must be before sparc entry or we get the wrong os.
  2470.          os=-sysv3
  2471.          ;;
  2472. @@ -1086,13 +1271,13 @@
  2473.      *-ibm)
  2474.          os=-aix
  2475.          ;;
  2476. -    *-wec)                        # EGCS LOCAL
  2477. +    *-wec)
  2478.          os=-proelf
  2479.          ;;
  2480. -    *-winbond)                    # EGCS LOCAL
  2481. +    *-winbond)
  2482.          os=-proelf
  2483.          ;;
  2484. -    *-oki)                        # EGCS LOCAL
  2485. +    *-oki)
  2486.          os=-proelf
  2487.          ;;
  2488.      *-hp)
  2489. @@ -1155,18 +1340,21 @@
  2490.      *-masscomp)
  2491.          os=-rtu
  2492.          ;;
  2493. -    f301-fujitsu)
  2494. +    f30[01]-fujitsu | f700-fujitsu)
  2495.          os=-uxpv
  2496.          ;;
  2497. -    *-rom68k)                    # EGCS LOCAL
  2498. +    *-rom68k)
  2499.          os=-coff
  2500.          ;;
  2501. -    *-*bug)                        # EGCS LOCAL
  2502. +    *-*bug)
  2503.          os=-coff
  2504.          ;;
  2505. -    *-apple)                    # EGCS LOCAL
  2506. +    *-apple)
  2507.          os=-macos
  2508.          ;;
  2509. +    *-atari*)
  2510. +        os=-mint
  2511. +        ;;
  2512.      *)
  2513.          os=-none
  2514.          ;;
  2515. @@ -1212,27 +1400,41 @@
  2516.              -genix*)
  2517.                  vendor=ns
  2518.                  ;;
  2519. -            -mvs*)
  2520. +            -mvs* | -opened*)
  2521.                  vendor=ibm
  2522.                  ;;
  2523.              -ptx*)
  2524.                  vendor=sequent
  2525.                  ;;
  2526. -            -vxsim* | -vxworks*)
  2527. +            -vxsim* | -vxworks* | -windiss*)
  2528.                  vendor=wrs
  2529.                  ;;
  2530.              -aux*)
  2531.                  vendor=apple
  2532.                  ;;
  2533. -            -hms*)                # EGCS LOCAL
  2534. +            -hms*)
  2535.                  vendor=hitachi
  2536.                  ;;
  2537. -            -mpw* | -macos*)        # EGCS LOCAL
  2538. +            -mpw* | -macos*)
  2539.                  vendor=apple
  2540.                  ;;
  2541. +            -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
  2542. +                vendor=atari
  2543. +                ;;
  2544. +            -vos*)
  2545. +                vendor=stratus
  2546. +                ;;
  2547.          esac
  2548.          basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
  2549.          ;;
  2550.  esac
  2551.  
  2552.  echo $basic_machine$os
  2553. +exit 0
  2554. +
  2555. +# Local variables:
  2556. +# eval: (add-hook 'write-file-hooks 'time-stamp)
  2557. +# time-stamp-start: "timestamp='"
  2558. +# time-stamp-format: "%:y-%02m-%02d"
  2559. +# time-stamp-end: "'"
  2560. +# End:
  2561. diff -urNEBb gcc-2.95.3-orig/configure.in gcc-2.95.3/configure.in
  2562. --- gcc-2.95.3-orig/configure.in    1999-06-23 00:44:40.000000000 +0200
  2563. +++ gcc-2.95.3/configure.in    2003-12-02 17:50:54.000000000 +0100
  2564. @@ -439,7 +439,7 @@
  2565.    *) x=${exec_prefix} ;;
  2566.    esac
  2567.    for l in ${with_libs}; do
  2568. -    copy_dirs="$l $x/${target_alias}/lib ${copy_dirs}"
  2569. +    echo Skipping lib copy
  2570.    done
  2571.  fi
  2572.  
  2573. diff -urNEBb gcc-2.95.3-orig/gcc/#collect2.c# gcc-2.95.3/gcc/#collect2.c#
  2574. --- gcc-2.95.3-orig/gcc/#collect2.c#    1970-01-01 01:00:00.000000000 +0100
  2575. +++ gcc-2.95.3/gcc/#collect2.c#    2003-12-02 17:50:54.000000000 +0100
  2576. @@ -0,0 +1,4310 @@
  2577. +/* Collect static initialization info into data structures that can be
  2578. +   traversed by C++ initialization and finalization routines.
  2579. +   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
  2580. +   Free Software Foundation, Inc.
  2581. +   Contributed by Chris Smith (csmith@convex.com).
  2582. +   Heavily modified by Michael Meissner (meissner@cygnus.com),
  2583. +   Per Bothner (bothner@cygnus.com), and John Gilmore (gnu@cygnus.com).
  2584. +
  2585. +This file is part of GNU CC.
  2586. +
  2587. +GNU CC is free software; you can redistribute it and/or modify
  2588. +it under the terms of the GNU General Public License as published by
  2589. +the Free Software Foundation; either version 2, or (at your option)
  2590. +any later version.
  2591. +
  2592. +GNU CC is distributed in the hope that it will be useful,
  2593. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  2594. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2595. +GNU General Public License for more details.
  2596. +
  2597. +You should have received a copy of the GNU General Public License
  2598. +along with GNU CC; see the file COPYING.  If not, write to
  2599. +the Free Software Foundation, 59 Temple Place - Suite 330,
  2600. +Boston, MA 02111-1307, USA.  */
  2601. +
  2602. +
  2603. +/* Build tables of static constructors and destructors and run ld.  */
  2604. +
  2605. +#include "config.h"
  2606. +#include "system.h"
  2607. +#include <signal.h>
  2608. +
  2609. +#ifdef vfork /* Autoconf may define this to fork for us. */
  2610. +# define VFORK_STRING "fork"
  2611. +#else
  2612. +# define VFORK_STRING "vfork"
  2613. +#endif
  2614. +#ifdef HAVE_VFORK_H
  2615. +#include <vfork.h>
  2616. +#endif
  2617. +#ifdef VMS
  2618. +#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
  2619. +               lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
  2620. +#endif /* VMS */
  2621. +
  2622. +#define COLLECT
  2623. +
  2624. +#include "collect2.h"
  2625. +#include "demangle.h"
  2626. +#include "obstack.h"
  2627. +#include "intl.h"
  2628. +
  2629. +/* Obstack allocation and deallocation routines.  */
  2630. +#define obstack_chunk_alloc xmalloc
  2631. +#define obstack_chunk_free free
  2632. +
  2633. +extern char *make_temp_file PROTO ((char *));
  2634. +
  2635. +/* On certain systems, we have code that works by scanning the object file
  2636. +   directly.  But this code uses system-specific header files and library
  2637. +   functions, so turn it off in a cross-compiler.  Likewise, the names of
  2638. +   the utilities are not correct for a cross-compiler; we have to hope that
  2639. +   cross-versions are in the proper directories.  */
  2640. +
  2641. +#ifdef CROSS_COMPILE
  2642. +#undef SUNOS4_SHARED_LIBRARIES
  2643. +#undef OBJECT_FORMAT_COFF
  2644. +#undef OBJECT_FORMAT_ROSE
  2645. +#undef MD_EXEC_PREFIX
  2646. +#undef REAL_LD_FILE_NAME
  2647. +#undef REAL_NM_FILE_NAME
  2648. +#undef REAL_STRIP_FILE_NAME
  2649. +#endif
  2650. +
  2651. +/* If we cannot use a special method, use the ordinary one:
  2652. +   run nm to find what symbols are present.
  2653. +   In a cross-compiler, this means you need a cross nm,
  2654. +   but that is not quite as unpleasant as special headers.  */
  2655. +
  2656. +#if !defined (OBJECT_FORMAT_COFF) && !defined (OBJECT_FORMAT_ROSE)
  2657. +#define OBJECT_FORMAT_NONE
  2658. +#endif
  2659. +
  2660. +#ifdef OBJECT_FORMAT_COFF
  2661. +
  2662. +#include <a.out.h>
  2663. +#include <ar.h>
  2664. +
  2665. +#ifdef UMAX
  2666. +#include <sgs.h>
  2667. +#endif
  2668. +
  2669. +/* Many versions of ldfcn.h define these.  */
  2670. +#ifdef FREAD
  2671. +#undef FREAD
  2672. +#undef FWRITE
  2673. +#endif
  2674. +
  2675. +#include <ldfcn.h>
  2676. +
  2677. +/* Some systems have an ISCOFF macro, but others do not.  In some cases
  2678. +   the macro may be wrong.  MY_ISCOFF is defined in tm.h files for machines
  2679. +   that either do not have an ISCOFF macro in /usr/include or for those 
  2680. +   where it is wrong.  */
  2681. +
  2682. +#ifndef MY_ISCOFF
  2683. +#define MY_ISCOFF(X) ISCOFF (X)
  2684. +#endif
  2685. +
  2686. +#endif /* OBJECT_FORMAT_COFF */
  2687. +
  2688. +#ifdef OBJECT_FORMAT_ROSE
  2689. +
  2690. +#ifdef _OSF_SOURCE
  2691. +#define USE_MMAP
  2692. +#endif
  2693. +
  2694. +#ifdef USE_MMAP
  2695. +#include <sys/mman.h>
  2696. +#endif
  2697. +
  2698. +#include <unistd.h>
  2699. +#include <mach_o_format.h>
  2700. +#include <mach_o_header.h>
  2701. +#include <mach_o_vals.h>
  2702. +#include <mach_o_types.h>
  2703. +
  2704. +#endif /* OBJECT_FORMAT_ROSE */
  2705. +
  2706. +#ifdef OBJECT_FORMAT_NONE
  2707. +
  2708. +/* Default flags to pass to nm.  */
  2709. +#ifndef NM_FLAGS
  2710. +#define NM_FLAGS "-n"
  2711. +#endif
  2712. +
  2713. +#endif /* OBJECT_FORMAT_NONE */
  2714. +
  2715. +/* Some systems use __main in a way incompatible with its use in gcc, in these
  2716. +   cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
  2717. +   give the same symbol without quotes for an alternative entry point.  You
  2718. +   must define both, or neither.  */
  2719. +#ifndef NAME__MAIN
  2720. +#define NAME__MAIN "__main"
  2721. +#define SYMBOL__MAIN __main
  2722. +#endif
  2723. +
  2724. +/* This must match tree.h.  */
  2725. +#define DEFAULT_INIT_PRIORITY 65535
  2726. +
  2727. +#if defined (LDD_SUFFIX) || SUNOS4_SHARED_LIBRARIES
  2728. +#define SCAN_LIBRARIES
  2729. +#endif
  2730. +
  2731. +struct undef_list_node
  2732. +{
  2733. +    struct undef_list_node *next;
  2734. +    char *name;
  2735. +    int reported;
  2736. +};
  2737. +
  2738. +struct undef_list_node undef_list = {0, 0};
  2739. +
  2740. +void empty_undef_list(void);
  2741. +void report_undef_list(char **);
  2742. +void add_undef_list(char *);
  2743. +struct undef_list_node *find_undef_list(char *name);
  2744. +
  2745. +#ifdef USE_COLLECT2
  2746. +int do_collecting = 1;
  2747. +#else
  2748. +int do_collecting = 0;
  2749. +#endif
  2750. +
  2751. +/* Linked lists of constructor and destructor names.  */
  2752. +
  2753. +struct id 
  2754. +{
  2755. +  struct id *next;
  2756. +  int sequence;
  2757. +  char name[1];
  2758. +};
  2759. +
  2760. +struct head
  2761. +{
  2762. +  struct id *first;
  2763. +  struct id *last;
  2764. +  int number;
  2765. +};
  2766. +
  2767. +/* Enumeration giving which pass this is for scanning the program file.  */
  2768. +
  2769. +enum pass {
  2770. +  PASS_FIRST,                /* without constructors */
  2771. +  PASS_OBJ,                /* individual objects */
  2772. +  PASS_LIB,                    /* looking for shared libraries */
  2773. +  PASS_SECOND                /* with constructors linked in */
  2774. +};
  2775. +
  2776. +extern char *version_string;
  2777. +
  2778. +int vflag;                /* true if -v */
  2779. +static int rflag;            /* true if -r */
  2780. +static int strip_flag;            /* true if -s */
  2781. +#ifdef COLLECT_EXPORT_LIST
  2782. +static int export_flag;                 /* true if -bE */
  2783. +static int aix64_flag;            /* true if -b64 */
  2784. +#endif
  2785. +
  2786. +int debug;                /* true if -debug */
  2787. +
  2788. +static int shared_obj;                /* true if -shared */
  2789. +
  2790. +static char *c_file;            /* <xxx>.c for constructor/destructor list.  */
  2791. +static char *o_file;            /* <xxx>.o for constructor/destructor list.  */
  2792. +#ifdef COLLECT_EXPORT_LIST
  2793. +static char *export_file;            /* <xxx>.x for AIX export list.  */
  2794. +static char *import_file;            /* <xxx>.p for AIX import list.  */
  2795. +#endif
  2796. +char *ldout;                /* File for ld errors.  */
  2797. +static char *output_file;        /* Output file for ld.  */
  2798. +static char *nm_file_name;        /* pathname of nm */
  2799. +#ifdef LDD_SUFFIX
  2800. +static char *ldd_file_name;        /* pathname of ldd (or equivalent) */
  2801. +#endif
  2802. +static char *strip_file_name;        /* pathname of strip */
  2803. +char *c_file_name;                /* pathname of gcc */
  2804. +static char *initname, *fininame;    /* names of init and fini funcs */
  2805. +
  2806. +static struct head constructors;    /* list of constructors found */
  2807. +static struct head destructors;        /* list of destructors found */
  2808. +#ifdef COLLECT_EXPORT_LIST
  2809. +static struct head exports;        /* list of exported symbols */
  2810. +static struct head imports;        /* list of imported symbols */
  2811. +static struct head undefined;        /* list of undefined symbols */
  2812. +#endif
  2813. +static struct head frame_tables;    /* list of frame unwind info tables */
  2814. +
  2815. +struct obstack temporary_obstack;
  2816. +struct obstack permanent_obstack;
  2817. +char * temporary_firstobj;
  2818. +
  2819. +/* Holds the return value of pexecute.  */
  2820. +int pexecute_pid;
  2821. +
  2822. +/* Defined in the automatically-generated underscore.c.  */
  2823. +extern int prepends_underscore;
  2824. +
  2825. +extern FILE *fdopen ();
  2826. +
  2827. +#ifndef GET_ENV_PATH_LIST
  2828. +#define GET_ENV_PATH_LIST(VAR,NAME)    do { (VAR) = getenv (NAME); } while (0)
  2829. +#endif
  2830. +
  2831. +/* Structure to hold all the directories in which to search for files to
  2832. +   execute.  */
  2833. +
  2834. +struct prefix_list
  2835. +{
  2836. +  char *prefix;               /* String to prepend to the path.  */
  2837. +  struct prefix_list *next;   /* Next in linked list.  */
  2838. +};
  2839. +
  2840. +struct path_prefix
  2841. +{
  2842. +  struct prefix_list *plist;  /* List of prefixes to try */
  2843. +  int max_len;                /* Max length of a prefix in PLIST */
  2844. +  char *name;                 /* Name of this list (used in config stuff) */
  2845. +};
  2846. +
  2847. +#ifdef COLLECT_EXPORT_LIST
  2848. +/* Lists to keep libraries to be scanned for global constructors/destructors. */
  2849. +static struct head libs;                    /* list of libraries */
  2850. +static struct path_prefix cmdline_lib_dirs; /* directories specified with -L */
  2851. +static struct path_prefix libpath_lib_dirs; /* directories in LIBPATH */
  2852. +static struct path_prefix *libpaths[3] = {&cmdline_lib_dirs,
  2853. +                      &libpath_lib_dirs, NULL};
  2854. +static char *libexts[3] = {"a", "so", NULL};  /* possible library extentions */
  2855. +#endif
  2856. +
  2857. +void error        PVPROTO((const char *, ...)) ATTRIBUTE_PRINTF_1;
  2858. +void fatal        PVPROTO((const char *, ...)) 
  2859. +  ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
  2860. +void fatal_perror    PVPROTO((const char *, ...))
  2861. +  ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
  2862. +static char *my_strerror    PROTO((int));
  2863. +static const char *my_strsignal    PROTO((int));
  2864. +static void handler        PROTO((int));
  2865. +static int is_ctor_dtor        PROTO((char *));
  2866. +static char *find_a_file    PROTO((struct path_prefix *, char *));
  2867. +static void add_prefix        PROTO((struct path_prefix *, char *));
  2868. +static void prefix_from_env    PROTO((char *, struct path_prefix *));
  2869. +static void prefix_from_string    PROTO((char *, struct path_prefix *));
  2870. +static void do_wait        PROTO((char *));
  2871. +static void fork_execute    PROTO((char *, char **));
  2872. +static void maybe_unlink    PROTO((char *));
  2873. +static void add_to_list        PROTO((struct head *, char *));
  2874. +static int  extract_init_priority PROTO((char *));
  2875. +static void sort_ids        PROTO((struct head *));
  2876. +static void write_list        PROTO((FILE *, char *, struct id *));
  2877. +#ifdef COLLECT_EXPORT_LIST
  2878. +static void dump_list        PROTO((FILE *, char *, struct id *));
  2879. +#endif
  2880. +#if 0
  2881. +static void dump_prefix_list    PROTO((FILE *, char *, struct prefix_list *));
  2882. +#endif
  2883. +static void write_list_with_asm PROTO((FILE *, char *, struct id *));
  2884. +static void write_c_file    PROTO((FILE *, char *));
  2885. +static void scan_prog_file    PROTO((char *, enum pass));
  2886. +#ifdef SCAN_LIBRARIES
  2887. +static void scan_libraries    PROTO((char *));
  2888. +#endif
  2889. +#ifdef COLLECT_EXPORT_LIST
  2890. +static int is_in_list        PROTO((char *, struct id *));
  2891. +static void write_export_file    PROTO((FILE *));
  2892. +static void write_import_file    PROTO((FILE *));
  2893. +static char *resolve_lib_name    PROTO((char *));
  2894. +static int use_import_list    PROTO((char *));
  2895. +static int ignore_library    PROTO((char *));
  2896. +#endif
  2897. +
  2898. +#ifdef NO_DUP2
  2899. +int
  2900. +dup2 (oldfd, newfd)
  2901. +     int oldfd;
  2902. +     int newfd;
  2903. +{
  2904. +  int fdtmp[256];
  2905. +  int fdx = 0;
  2906. +  int fd;
  2907. +  if (oldfd == newfd)
  2908. +    return oldfd;
  2909. +  close (newfd);
  2910. +  while ((fd = dup (oldfd)) != newfd && fd >= 0) /* good enough for low fd's */
  2911. +    fdtmp[fdx++] = fd;
  2912. +  while (fdx > 0)
  2913. +    close (fdtmp[--fdx]);
  2914. +
  2915. +  return fd;
  2916. +}
  2917. +#endif
  2918. +
  2919. +static char *
  2920. +my_strerror (e)
  2921. +     int e;
  2922. +{
  2923. +
  2924. +#ifdef HAVE_STRERROR
  2925. +  return strerror (e);
  2926. +
  2927. +#else
  2928. +
  2929. +  if (!e)
  2930. +    return "";
  2931. +
  2932. +  if (e > 0 && e < sys_nerr)
  2933. +    return sys_errlist[e];
  2934. +
  2935. +  return "errno = ?";
  2936. +#endif
  2937. +}
  2938. +
  2939. +#ifdef __amigaos4__
  2940. +#define NSIG SIGTERM
  2941. +#define NO_SYS_SIGLIST 
  2942. +#endif
  2943. +
  2944. +static const char *
  2945. +my_strsignal (s)
  2946. +     int s;
  2947. +{
  2948. +#ifdef HAVE_STRSIGNAL
  2949. +  return strsignal (s);
  2950. +#else
  2951. +  if (s >= 0 && s < NSIG)
  2952. +    {
  2953. +# ifdef NO_SYS_SIGLIST
  2954. +      static char buffer[30];
  2955. +
  2956. +      sprintf (buffer, "Unknown signal %d", s);
  2957. +      return buffer;
  2958. +# else
  2959. +      return sys_siglist[s];
  2960. +# endif
  2961. +    }
  2962. +  else
  2963. +    return NULL;
  2964. +#endif /* HAVE_STRSIGNAL */
  2965. +}
  2966. +
  2967. +/* Delete tempfiles and exit function.  */
  2968. +
  2969. +void
  2970. +collect_exit (status)
  2971. +     int status;
  2972. +{
  2973. +  if (c_file != 0 && c_file[0])
  2974. +    maybe_unlink (c_file);
  2975. +
  2976. +  if (o_file != 0 && o_file[0])
  2977. +    maybe_unlink (o_file);
  2978. +
  2979. +#ifdef COLLECT_EXPORT_LIST
  2980. +  if (export_file != 0 && export_file[0])
  2981. +    maybe_unlink (export_file);
  2982. +
  2983. +  if (import_file != 0 && import_file[0])
  2984. +    maybe_unlink (import_file);
  2985. +#endif
  2986. +
  2987. +  if (ldout != 0 && ldout[0])
  2988. +    {
  2989. +      dump_file (ldout);
  2990. +      maybe_unlink (ldout);
  2991. +    }
  2992. +
  2993. +  if (status != 0 && output_file != 0 && output_file[0])
  2994. +    maybe_unlink (output_file);
  2995. +
  2996. +  exit (status);
  2997. +}
  2998. +
  2999. +
  3000. +/* Notify user of a non-error.  */
  3001. +void
  3002. +notice VPROTO((char *msgid, ...))
  3003. +{
  3004. +#ifndef ANSI_PROTOTYPES
  3005. +  char *msgid;
  3006. +#endif
  3007. +  va_list ap;
  3008. +
  3009. +  VA_START (ap, msgid);
  3010. +
  3011. +#ifndef ANSI_PROTOTYPES
  3012. +  msgid = va_arg (ap, char *);
  3013. +#endif
  3014. +
  3015. +  vfprintf (stderr, _(msgid), ap);
  3016. +  va_end (ap);
  3017. +}
  3018. +
  3019. +/* Die when sys call fails.  */
  3020. +
  3021. +void
  3022. +fatal_perror VPROTO((const char * msgid, ...))
  3023. +{
  3024. +#ifndef ANSI_PROTOTYPES
  3025. +  const char *msgid;
  3026. +#endif
  3027. +  int e = errno;
  3028. +  va_list ap;
  3029. +
  3030. +  VA_START (ap, msgid);
  3031. +
  3032. +#ifndef ANSI_PROTOTYPES
  3033. +  msgid = va_arg (ap, const char *);
  3034. +#endif
  3035. +
  3036. +  fprintf (stderr, "collect2: ");
  3037. +  vfprintf (stderr, _(msgid), ap);
  3038. +  fprintf (stderr, ": %s\n", my_strerror (e));
  3039. +  va_end (ap);
  3040. +
  3041. +  collect_exit (FATAL_EXIT_CODE);
  3042. +}
  3043. +
  3044. +/* Just die.  */
  3045. +
  3046. +void
  3047. +fatal VPROTO((const char * msgid, ...))
  3048. +{
  3049. +#ifndef ANSI_PROTOTYPES
  3050. +  const char *msgid;
  3051. +#endif
  3052. +  va_list ap;
  3053. +  
  3054. +  VA_START (ap, msgid);
  3055. +
  3056. +#ifndef ANSI_PROTOTYPES
  3057. +  msgid = va_arg (ap, const char *);
  3058. +#endif
  3059. +  
  3060. +  fprintf (stderr, "collect2: ");
  3061. +  vfprintf (stderr, _(msgid), ap);
  3062. +  fprintf (stderr, "\n");
  3063. +  va_end (ap);
  3064. +
  3065. +  collect_exit (FATAL_EXIT_CODE);
  3066. +}
  3067. +
  3068. +/* Write error message.  */
  3069. +
  3070. +void
  3071. +error VPROTO((const char * msgid, ...))
  3072. +{
  3073. +#ifndef ANSI_PROTOTYPES
  3074. +  const char * msgid;
  3075. +#endif
  3076. +  va_list ap;
  3077. +  VA_START (ap, msgid);
  3078. +  
  3079. +#ifndef ANSI_PROTOTYPES
  3080. +  msgid = va_arg (ap, const char *);
  3081. +#endif
  3082. +
  3083. +  fprintf (stderr, "collect2: ");
  3084. +  vfprintf (stderr, _(msgid), ap);
  3085. +  fprintf (stderr, "\n");
  3086. +  va_end(ap);
  3087. +}
  3088. +
  3089. +/* In case obstack is linked in, and abort is defined to fancy_abort,
  3090. +   provide a default entry.  */
  3091. +
  3092. +void
  3093. +fancy_abort ()
  3094. +{
  3095. +  fatal ("internal error");
  3096. +}
  3097. +
  3098. +static void
  3099. +handler (signo)
  3100. +     int signo;
  3101. +{
  3102. +  if (c_file != 0 && c_file[0])
  3103. +    maybe_unlink (c_file);
  3104. +
  3105. +  if (o_file != 0 && o_file[0])
  3106. +    maybe_unlink (o_file);
  3107. +
  3108. +  if (ldout != 0 && ldout[0])
  3109. +    maybe_unlink (ldout);
  3110. +
  3111. +#ifdef COLLECT_EXPORT_LIST
  3112. +  if (export_file != 0 && export_file[0])
  3113. +    maybe_unlink (export_file);
  3114. +
  3115. +  if (import_file != 0 && import_file[0])
  3116. +    maybe_unlink (import_file);
  3117. +#endif
  3118. +
  3119. +  signal (signo, SIG_DFL);
  3120. +  kill (getpid (), signo);
  3121. +}
  3122. +
  3123. +
  3124. +PTR
  3125. +xcalloc (size1, size2)
  3126. +  size_t size1, size2;
  3127. +{
  3128. +  PTR ptr = (PTR) calloc (size1, size2);
  3129. +  if (!ptr)
  3130. +    fatal ("out of memory");
  3131. +  return ptr;
  3132. +}
  3133. +
  3134. +PTR
  3135. +xmalloc (size)
  3136. +  size_t size;
  3137. +{
  3138. +  PTR ptr = (PTR) malloc (size);
  3139. +  if (!ptr)
  3140. +    fatal ("out of memory");
  3141. +  return ptr;
  3142. +}
  3143. +
  3144. +PTR
  3145. +xrealloc (old, size)
  3146. +  PTR old;
  3147. +  size_t size;
  3148. +{
  3149. +  register PTR ptr;
  3150. +  if (old)
  3151. +    ptr = (PTR) realloc (old, size);
  3152. +  else
  3153. +    ptr = (PTR) malloc (size);
  3154. +  if (ptr == 0)
  3155. +    fatal ("virtual memory exhausted");
  3156. +  return ptr;
  3157. +}
  3158. +
  3159. +int
  3160. +file_exists (name)
  3161. +     char *name;
  3162. +{
  3163. +  return access (name, R_OK) == 0;
  3164. +}
  3165. +
  3166. +/* Make a copy of a string INPUT with size SIZE.  */
  3167. +
  3168. +char *
  3169. +xstrdup (input)
  3170. +  const char *input;
  3171. +{
  3172. +  register size_t len = strlen (input) + 1;
  3173. +  register char *output = xmalloc (len);
  3174. +  memcpy (output, input, len);
  3175. +  return output;
  3176. +}
  3177. +
  3178. +/* Parse a reasonable subset of shell quoting syntax.  */
  3179. +
  3180. +static char *
  3181. +extract_string (pp)
  3182. +     char **pp;
  3183. +{
  3184. +  char *p = *pp;
  3185. +  int backquote = 0;
  3186. +  int inside = 0;
  3187. +
  3188. +  for (;;)
  3189. +    {
  3190. +      char c = *p;
  3191. +      if (c == '\0')
  3192. +    break;
  3193. +      ++p;
  3194. +      if (backquote)
  3195. +    obstack_1grow (&temporary_obstack, c);
  3196. +      else if (! inside && c == ' ')
  3197. +    break;
  3198. +      else if (! inside && c == '\\')
  3199. +    backquote = 1;
  3200. +      else if (c == '\'')
  3201. +    inside = !inside;
  3202. +      else
  3203. +    obstack_1grow (&temporary_obstack, c);
  3204. +    }
  3205. +
  3206. +  obstack_1grow (&temporary_obstack, '\0');
  3207. +  *pp = p;
  3208. +  return obstack_finish (&temporary_obstack);
  3209. +}
  3210. +
  3211. +void
  3212. +dump_file (name)
  3213. +     char *name;
  3214. +{
  3215. +  FILE *stream = fopen (name, "r");
  3216. +  int no_demangle = !! getenv ("COLLECT_NO_DEMANGLE");
  3217. +
  3218. +  if (stream == 0)
  3219. +    return;
  3220. +  while (1)
  3221. +    {
  3222. +      int c;
  3223. +      while (c = getc (stream),
  3224. +         c != EOF && (ISALNUM (c) || c == '_' || c == '$' || c == '.'))
  3225. +    obstack_1grow (&temporary_obstack, c);
  3226. +      if (obstack_object_size (&temporary_obstack) > 0)
  3227. +    {
  3228. +      char *word, *p, *result;
  3229. +      obstack_1grow (&temporary_obstack, '\0');
  3230. +      word = obstack_finish (&temporary_obstack);
  3231. +
  3232. +      if (*word == '.')
  3233. +        ++word, putc ('.', stderr);
  3234. +      p = word;
  3235. +      if (*p == '_' && prepends_underscore)
  3236. +        ++p;
  3237. +
  3238. +      if (no_demangle)
  3239. +        result = 0;
  3240. +      else
  3241. +        result = cplus_demangle (p, DMGL_PARAMS | DMGL_ANSI);
  3242. +
  3243. +      if (result)
  3244. +        {
  3245. +          int diff;
  3246. +          fputs (result, stderr);
  3247. +
  3248. +          diff = strlen (word) - strlen (result);
  3249. +          while (diff > 0)
  3250. +        --diff, putc (' ', stderr);
  3251. +          while (diff < 0 && c == ' ')
  3252. +        ++diff, c = getc (stream);
  3253. +
  3254. +          free (result);
  3255. +        }
  3256. +      else
  3257. +        fputs (word, stderr);
  3258. +
  3259. +      fflush (stderr);
  3260. +      obstack_free (&temporary_obstack, temporary_firstobj);
  3261. +    }
  3262. +      if (c == EOF)
  3263. +    break;
  3264. +      putc (c, stderr);
  3265. +    }
  3266. +  fclose (stream);
  3267. +}
  3268. +
  3269. +/* Decide whether the given symbol is:
  3270. +   a constructor (1), a destructor (2), or neither (0).  */
  3271. +
  3272. +static int
  3273. +is_ctor_dtor (s)
  3274. +     char *s;
  3275. +{
  3276. +  struct names { char *name; int len; int ret; int two_underscores; };
  3277. +
  3278. +  register struct names *p;
  3279. +  register int ch;
  3280. +  register char *orig_s = s;
  3281. +
  3282. +  static struct names special[] = {
  3283. +#ifdef NO_DOLLAR_IN_LABEL
  3284. +#ifdef NO_DOT_IN_LABEL
  3285. +    { "GLOBAL__I_", sizeof ("GLOBAL__I_")-1, 1, 0 },
  3286. +    { "GLOBAL__D_", sizeof ("GLOBAL__D_")-1, 2, 0 },
  3287. +    { "GLOBAL__F_", sizeof ("GLOBAL__F_")-1, 5, 0 },
  3288. +#else
  3289. +    { "GLOBAL_.I.", sizeof ("GLOBAL_.I.")-1, 1, 0 },
  3290. +    { "GLOBAL_.D.", sizeof ("GLOBAL_.D.")-1, 2, 0 },
  3291. +    { "GLOBAL_.F.", sizeof ("GLOBAL_.F.")-1, 5, 0 },
  3292. +#endif
  3293. +#else
  3294. +    { "GLOBAL_$I$", sizeof ("GLOBAL_$I$")-1, 1, 0 },
  3295. +    { "GLOBAL_$D$", sizeof ("GLOBAL_$D$")-1, 2, 0 },
  3296. +    { "GLOBAL_$F$", sizeof ("GLOBAL_$F$")-1, 5, 0 },
  3297. +#endif
  3298. +    { "GLOBAL__FI_", sizeof ("GLOBAL__FI_")-1, 3, 0 },
  3299. +    { "GLOBAL__FD_", sizeof ("GLOBAL__FD_")-1, 4, 0 },
  3300. +#ifdef CFRONT_LOSSAGE /* Do not collect cfront initialization functions.
  3301. +             cfront has its own linker procedure to collect them;
  3302. +             if collect2 gets them too, they get collected twice
  3303. +             when the cfront procedure is run and the compiler used
  3304. +             for linking happens to be GCC.  */
  3305. +    { "sti__", sizeof ("sti__")-1, 1, 1 },
  3306. +    { "std__", sizeof ("std__")-1, 2, 1 },
  3307. +#endif /* CFRONT_LOSSAGE */
  3308. +    { NULL, 0, 0, 0 }
  3309. +  };
  3310. +
  3311. +  while ((ch = *s) == '_')
  3312. +    ++s;
  3313. +
  3314. +  if (s == orig_s)
  3315. +    return 0;
  3316. +
  3317. +  for (p = &special[0]; p->len > 0; p++)
  3318. +    {
  3319. +      if (ch == p->name[0]
  3320. +      && (!p->two_underscores || ((s - orig_s) >= 2))
  3321. +      && strncmp(s, p->name, p->len) == 0)
  3322. +    {
  3323. +      return p->ret;
  3324. +    }
  3325. +    }
  3326. +  return 0;
  3327. +}
  3328. +
  3329. +/* Routine to add variables to the environment.  */
  3330. +
  3331. +#ifndef HAVE_PUTENV
  3332. +
  3333. +int
  3334. +putenv (str)
  3335. +     char *str;
  3336. +{
  3337. +#ifndef VMS            /* nor about VMS */
  3338. +
  3339. +  extern char **environ;
  3340. +  char **old_environ = environ;
  3341. +  char **envp;
  3342. +  int num_envs = 0;
  3343. +  int name_len = 1;
  3344. +  char *p = str;
  3345. +  int ch;
  3346. +
  3347. +  while ((ch = *p++) != '\0' && ch != '=')
  3348. +    name_len++;
  3349. +
  3350. +  if (!ch)
  3351. +    abort ();
  3352. +
  3353. +  /* Search for replacing an existing environment variable, and
  3354. +     count the number of total environment variables.  */
  3355. +  for (envp = old_environ; *envp; envp++)
  3356. +    {
  3357. +      num_envs++;
  3358. +      if (!strncmp (str, *envp, name_len))
  3359. +    {
  3360. +      *envp = str;
  3361. +      return 0;
  3362. +    }
  3363. +    }
  3364. +
  3365. +  /* Add a new environment variable */
  3366. +  environ = (char **) xmalloc (sizeof (char *) * (num_envs+2));
  3367. +  *environ = str;
  3368. +  bcopy ((char *) old_environ, (char *) (environ + 1),
  3369. +     sizeof (char *) * (num_envs+1));
  3370. +
  3371. +  return 0;
  3372. +#endif    /* VMS */
  3373. +}
  3374. +
  3375. +#endif    /* HAVE_PUTENV */
  3376. +
  3377. +/* By default, colon separates directories in a path.  */
  3378. +#ifndef PATH_SEPARATOR
  3379. +#define PATH_SEPARATOR ':'
  3380. +#endif
  3381. +
  3382. +/* We maintain two prefix lists: one from COMPILER_PATH environment variable
  3383. +   and one from the PATH variable.  */
  3384. +
  3385. +static struct path_prefix cpath, path;
  3386. +
  3387. +#ifdef CROSS_COMPILE
  3388. +/* This is the name of the target machine.  We use it to form the name
  3389. +   of the files to execute.  */
  3390. +
  3391. +static char *target_machine = TARGET_MACHINE;
  3392. +#endif
  3393. +
  3394. +/* Search for NAME using prefix list PPREFIX.  We only look for executable
  3395. +   files. 
  3396. +
  3397. +   Return 0 if not found, otherwise return its name, allocated with malloc.  */
  3398. +
  3399. +static char *
  3400. +find_a_file (pprefix, name)
  3401. +     struct path_prefix *pprefix;
  3402. +     char *name;
  3403. +{
  3404. +  char *temp;
  3405. +  struct prefix_list *pl;
  3406. +  int len = pprefix->max_len + strlen (name) + 1;
  3407. +
  3408. +  if (debug)
  3409. +    fprintf (stderr, "Looking for '%s'\n", name);
  3410. +  
  3411. +#ifdef EXECUTABLE_SUFFIX
  3412. +  len += strlen (EXECUTABLE_SUFFIX);
  3413. +#endif
  3414. +
  3415. +  temp = xmalloc (len);
  3416. +
  3417. +  /* Determine the filename to execute (special case for absolute paths).  */
  3418. +
  3419. +  if (*name == '/'
  3420. +#ifdef HAVE_DOS_BASED_FILE_SYSTEM
  3421. +      || (*name && name[1] == ':')
  3422. +#endif
  3423. +      )
  3424. +    {
  3425. +      if (access (name, X_OK) == 0)
  3426. +    {
  3427. +      strcpy (temp, name);
  3428. +
  3429. +      if (debug)
  3430. +        fprintf (stderr, "  - found: absolute path\n");
  3431. +      
  3432. +      return temp;
  3433. +    }
  3434. +
  3435. +#ifdef EXECUTABLE_SUFFIX
  3436. +    /* Some systems have a suffix for executable files.
  3437. +       So try appending that.  */
  3438. +      strcpy (temp, name);
  3439. +    strcat (temp, EXECUTABLE_SUFFIX);
  3440. +    
  3441. +    if (access (temp, X_OK) == 0)
  3442. +      return temp;
  3443. +#endif
  3444. +
  3445. +      if (debug)
  3446. +    fprintf (stderr, "  - failed to locate using absolute path\n");
  3447. +    }
  3448. +  else
  3449. +    for (pl = pprefix->plist; pl; pl = pl->next)
  3450. +      {
  3451. +    strcpy (temp, pl->prefix);
  3452. +    strcat (temp, name);
  3453. +    
  3454. +    if (access (temp, X_OK) == 0)
  3455. +      return temp;
  3456. +
  3457. +#ifdef EXECUTABLE_SUFFIX
  3458. +    /* Some systems have a suffix for executable files.
  3459. +       So try appending that.  */
  3460. +    strcat (temp, EXECUTABLE_SUFFIX);
  3461. +    
  3462. +    if (access (temp, X_OK) == 0)
  3463. +      return temp;
  3464. +#endif
  3465. +      }
  3466. +
  3467. +  if (debug && pprefix->plist == NULL)
  3468. +    fprintf (stderr, "  - failed: no entries in prefix list\n");
  3469. +
  3470. +  free (temp);
  3471. +  return 0;
  3472. +}
  3473. +
  3474. +/* Add an entry for PREFIX to prefix list PPREFIX.  */
  3475. +
  3476. +static void
  3477. +add_prefix (pprefix, prefix)
  3478. +     struct path_prefix *pprefix;
  3479. +     char *prefix;
  3480. +{
  3481. +  struct prefix_list *pl, **prev;
  3482. +  int len;
  3483. +
  3484. +  if (pprefix->plist)
  3485. +    {
  3486. +      for (pl = pprefix->plist; pl->next; pl = pl->next)
  3487. +    ;
  3488. +      prev = &pl->next;
  3489. +    }
  3490. +  else
  3491. +    prev = &pprefix->plist;
  3492. +
  3493. +  /* Keep track of the longest prefix */
  3494. +
  3495. +  len = strlen (prefix);
  3496. +  if (len > pprefix->max_len)
  3497. +    pprefix->max_len = len;
  3498. +
  3499. +  pl = (struct prefix_list *) xmalloc (sizeof (struct prefix_list));
  3500. +  pl->prefix = xstrdup (prefix);
  3501. +
  3502. +  if (*prev)
  3503. +    pl->next = *prev;
  3504. +  else
  3505. +    pl->next = (struct prefix_list *) 0;
  3506. +  *prev = pl;
  3507. +}
  3508. +
  3509. +/* Take the value of the environment variable ENV, break it into a path, and
  3510. +   add of the entries to PPREFIX.  */
  3511. +
  3512. +static void
  3513. +prefix_from_env (env, pprefix)
  3514. +     char *env;
  3515. +     struct path_prefix *pprefix;
  3516. +{
  3517. +  char *p;
  3518. +  GET_ENV_PATH_LIST (p, env);
  3519. +
  3520. +  if (p)
  3521. +    prefix_from_string (p, pprefix);
  3522. +}
  3523. +
  3524. +static void
  3525. +prefix_from_string (p, pprefix)
  3526. +     char *p;
  3527. +     struct path_prefix *pprefix;
  3528. +{
  3529. +  char *startp, *endp;
  3530. +  char *nstore = (char *) xmalloc (strlen (p) + 3);
  3531. +
  3532. +  if (debug)
  3533. +    fprintf (stderr, "Convert string '%s' into prefixes, separator = '%c'\n", p, PATH_SEPARATOR);
  3534. +  
  3535. +  startp = endp = p;
  3536. +  while (1)
  3537. +    {
  3538. +      if (*endp == PATH_SEPARATOR || *endp == 0)
  3539. +    {
  3540. +      strncpy (nstore, startp, endp-startp);
  3541. +      if (endp == startp)
  3542. +        {
  3543. +          strcpy (nstore, "./");
  3544. +        }
  3545. +      else if (endp[-1] != '/')
  3546. +        {
  3547. +          nstore[endp-startp] = '/';
  3548. +          nstore[endp-startp+1] = 0;
  3549. +        }
  3550. +      else
  3551. +        nstore[endp-startp] = 0;
  3552. +
  3553. +      if (debug)
  3554. +        fprintf (stderr, "  - add prefix: %s\n", nstore);
  3555. +      
  3556. +      add_prefix (pprefix, nstore);
  3557. +      if (*endp == 0)
  3558. +        break;
  3559. +      endp = startp = endp + 1;
  3560. +    }
  3561. +      else
  3562. +    endp++;
  3563. +    }
  3564. +}
  3565. +
  3566. +/* Main program.  */
  3567. +
  3568. +int
  3569. +main (argc, argv)
  3570. +     int argc;
  3571. +     char *argv[];
  3572. +{
  3573. +  char *ld_suffix    = "ld";
  3574. +  char *full_ld_suffix    = ld_suffix;
  3575. +  char *real_ld_suffix    = "real-ld";
  3576. +  char *collect_ld_suffix = "collect-ld";
  3577. +  char *nm_suffix    = "nm";
  3578. +  char *full_nm_suffix    = nm_suffix;
  3579. +  char *gnm_suffix    = "gnm";
  3580. +  char *full_gnm_suffix    = gnm_suffix;
  3581. +#ifdef LDD_SUFFIX
  3582. +  char *ldd_suffix    = LDD_SUFFIX;
  3583. +  char *full_ldd_suffix    = ldd_suffix;
  3584. +#endif
  3585. +  char *strip_suffix    = "strip";
  3586. +  char *full_strip_suffix = strip_suffix;
  3587. +  char *gstrip_suffix    = "gstrip";
  3588. +  char *full_gstrip_suffix = gstrip_suffix;
  3589. +  char *arg;
  3590. +  FILE *outf;
  3591. +#ifdef COLLECT_EXPORT_LIST
  3592. +  FILE *exportf;
  3593. +  FILE *importf;
  3594. +#endif
  3595. +  char *ld_file_name;
  3596. +  char *p;
  3597. +  char **c_argv;
  3598. +  char **c_ptr;
  3599. +  char **ld1_argv;
  3600. +  char **ld1;
  3601. +  char **ld2_argv;
  3602. +  char **ld2;
  3603. +  char **object_lst;
  3604. +  char **object;
  3605. +  int first_file;
  3606. +  int num_c_args    = argc+9;
  3607. +
  3608. +#if defined (COLLECT2_HOST_INITIALIZATION)
  3609. +  /* Perform system dependant initialization, if neccessary.  */
  3610. +  COLLECT2_HOST_INITIALIZATION;
  3611. +#endif
  3612. +
  3613. +#ifdef HAVE_LC_MESSAGES
  3614. +  setlocale (LC_MESSAGES, "");
  3615. +#endif
  3616. +  (void) bindtextdomain (PACKAGE, localedir);
  3617. +  (void) textdomain (PACKAGE);
  3618. +
  3619. +  /* Do not invoke xcalloc before this point, since locale needs to be
  3620. +     set first, in case a diagnostic is issued.  */
  3621. +
  3622. +  ld1 = ld1_argv = (char **) xcalloc (sizeof (char *), argc+3);
  3623. +  ld2 = ld2_argv = (char **) xcalloc (sizeof (char *), argc+6);
  3624. +  object = object_lst = (char **) xcalloc (sizeof (char *), argc);
  3625. +
  3626. +#ifdef DEBUG
  3627. +  debug = 1;
  3628. +#endif
  3629. +
  3630. +  /* Parse command line early for instances of -debug.  This allows
  3631. +     the debug flag to be set before functions like find_a_file()
  3632. +     are called.  */
  3633. +  {
  3634. +    int i;
  3635. +    
  3636. +    for (i = 1; argv[i] != NULL; i ++)
  3637. +      if (! strcmp (argv[i], "-debug"))
  3638. +    debug = 1;
  3639. +    vflag = debug;
  3640. +  }
  3641. +
  3642. +#ifndef DEFAULT_A_OUT_NAME
  3643. +  output_file = "a.out";
  3644. +#else
  3645. +  output_file = DEFAULT_A_OUT_NAME;
  3646. +#endif
  3647. +
  3648. +  obstack_begin (&temporary_obstack, 0);
  3649. +  obstack_begin (&permanent_obstack, 0);
  3650. +  temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
  3651. +
  3652. +  current_demangling_style = gnu_demangling;
  3653. +  p = getenv ("COLLECT_GCC_OPTIONS");
  3654. +  while (p && *p)
  3655. +    {
  3656. +      char *q = extract_string (&p);
  3657. +      if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
  3658. +    num_c_args++;
  3659. +    }
  3660. +  obstack_free (&temporary_obstack, temporary_firstobj);
  3661. +  ++num_c_args;
  3662. +
  3663. +  c_ptr = c_argv = (char **) xcalloc (sizeof (char *), num_c_args);
  3664. +
  3665. +  if (argc < 2)
  3666. +    fatal ("no arguments");
  3667. +
  3668. +#ifdef SIGQUIT
  3669. +  if (signal (SIGQUIT, SIG_IGN) != SIG_IGN)
  3670. +    signal (SIGQUIT, handler);
  3671. +#endif
  3672. +  if (signal (SIGINT, SIG_IGN) != SIG_IGN)
  3673. +    signal (SIGINT, handler);
  3674. +#ifdef SIGALRM
  3675. +  if (signal (SIGALRM, SIG_IGN) != SIG_IGN)
  3676. +    signal (SIGALRM, handler);
  3677. +#endif
  3678. +#ifdef SIGHUP
  3679. +  if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
  3680. +    signal (SIGHUP, handler);
  3681. +#endif
  3682. +  if (signal (SIGSEGV, SIG_IGN) != SIG_IGN)
  3683. +    signal (SIGSEGV, handler);
  3684. +#ifdef SIGBUS
  3685. +  if (signal (SIGBUS, SIG_IGN) != SIG_IGN)
  3686. +    signal (SIGBUS, handler);
  3687. +#endif
  3688. +
  3689. +  /* Extract COMPILER_PATH and PATH into our prefix list.  */
  3690. +  prefix_from_env ("COMPILER_PATH", &cpath);
  3691. +  prefix_from_env ("PATH", &path);
  3692. +
  3693. +#ifdef CROSS_COMPILE
  3694. +  /* If we look for a program in the compiler directories, we just use
  3695. +     the short name, since these directories are already system-specific.
  3696. +     But it we look for a program in the system directories, we need to
  3697. +     qualify the program name with the target machine.  */
  3698. +
  3699. +  full_ld_suffix
  3700. +    = xcalloc (strlen (ld_suffix) + strlen (target_machine) + 2, 1);
  3701. +  strcpy (full_ld_suffix, target_machine);
  3702. +  strcat (full_ld_suffix, "-");
  3703. +  strcat (full_ld_suffix, ld_suffix);
  3704. +
  3705. +#if 0
  3706. +  full_gld_suffix
  3707. +    = xcalloc (strlen (gld_suffix) + strlen (target_machine) + 2, 1);
  3708. +  strcpy (full_gld_suffix, target_machine);
  3709. +  strcat (full_gld_suffix, "-");
  3710. +  strcat (full_gld_suffix, gld_suffix);
  3711. +#endif
  3712. +
  3713. +  full_nm_suffix
  3714. +    = xcalloc (strlen (nm_suffix) + strlen (target_machine) + 2, 1);
  3715. +  strcpy (full_nm_suffix, target_machine);
  3716. +  strcat (full_nm_suffix, "-");
  3717. +  strcat (full_nm_suffix, nm_suffix);
  3718. +
  3719. +  full_gnm_suffix
  3720. +    = xcalloc (strlen (gnm_suffix) + strlen (target_machine) + 2, 1);
  3721. +  strcpy (full_gnm_suffix, target_machine);
  3722. +  strcat (full_gnm_suffix, "-");
  3723. +  strcat (full_gnm_suffix, gnm_suffix);
  3724. +
  3725. +#ifdef LDD_SUFFIX
  3726. +  full_ldd_suffix
  3727. +    = xcalloc (strlen (ldd_suffix) + strlen (target_machine) + 2, 1);
  3728. +  strcpy (full_ldd_suffix, target_machine);
  3729. +  strcat (full_ldd_suffix, "-");
  3730. +  strcat (full_ldd_suffix, ldd_suffix);
  3731. +#endif
  3732. +
  3733. +  full_strip_suffix
  3734. +    = xcalloc (strlen (strip_suffix) + strlen (target_machine) + 2, 1);
  3735. +  strcpy (full_strip_suffix, target_machine);
  3736. +  strcat (full_strip_suffix, "-");
  3737. +  strcat (full_strip_suffix, strip_suffix);
  3738. +  
  3739. +  full_gstrip_suffix
  3740. +    = xcalloc (strlen (gstrip_suffix) + strlen (target_machine) + 2, 1);
  3741. +  strcpy (full_gstrip_suffix, target_machine);
  3742. +  strcat (full_gstrip_suffix, "-");
  3743. +  strcat (full_gstrip_suffix, gstrip_suffix);
  3744. +#endif /* CROSS_COMPILE */
  3745. +
  3746. +  /* Try to discover a valid linker/nm/strip to use.  */
  3747. +
  3748. +  /* Maybe we know the right file to use (if not cross).  */
  3749. +  ld_file_name = 0;
  3750. +#ifdef DEFAULT_LINKER
  3751. +  if (access (DEFAULT_LINKER, X_OK) == 0)
  3752. +    ld_file_name = DEFAULT_LINKER;
  3753. +  if (ld_file_name == 0)
  3754. +#endif
  3755. +#ifdef REAL_LD_FILE_NAME
  3756. +  ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME);
  3757. +  if (ld_file_name == 0)
  3758. +#endif
  3759. +  /* Search the (target-specific) compiler dirs for ld'.  */
  3760. +  ld_file_name = find_a_file (&cpath, real_ld_suffix);
  3761. +  /* Likewise for `collect-ld'.  */
  3762. +  if (ld_file_name == 0)
  3763. +    ld_file_name = find_a_file (&cpath, collect_ld_suffix);
  3764. +  /* Search the compiler directories for `ld'.  We have protection against
  3765. +     recursive calls in find_a_file.  */
  3766. +  if (ld_file_name == 0)
  3767. +    ld_file_name = find_a_file (&cpath, ld_suffix);
  3768. +  /* Search the ordinary system bin directories
  3769. +     for `ld' (if native linking) or `TARGET-ld' (if cross).  */
  3770. +  if (ld_file_name == 0)
  3771. +    ld_file_name = find_a_file (&path, full_ld_suffix);
  3772. +
  3773. +#ifdef REAL_NM_FILE_NAME
  3774. +  nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME);
  3775. +  if (nm_file_name == 0)
  3776. +#endif
  3777. +  nm_file_name = find_a_file (&cpath, gnm_suffix);
  3778. +  if (nm_file_name == 0)
  3779. +    nm_file_name = find_a_file (&path, full_gnm_suffix);
  3780. +  if (nm_file_name == 0)
  3781. +    nm_file_name = find_a_file (&cpath, nm_suffix);
  3782. +  if (nm_file_name == 0)
  3783. +    nm_file_name = find_a_file (&path, full_nm_suffix);
  3784. +
  3785. +#ifdef LDD_SUFFIX
  3786. +  ldd_file_name = find_a_file (&cpath, ldd_suffix);
  3787. +  if (ldd_file_name == 0)
  3788. +    ldd_file_name = find_a_file (&path, full_ldd_suffix);
  3789. +#endif
  3790. +
  3791. +#ifdef REAL_STRIP_FILE_NAME
  3792. +  strip_file_name = find_a_file (&path, REAL_STRIP_FILE_NAME);
  3793. +  if (strip_file_name == 0)
  3794. +#endif
  3795. +  strip_file_name = find_a_file (&cpath, gstrip_suffix);
  3796. +  if (strip_file_name == 0)
  3797. +    strip_file_name = find_a_file (&path, full_gstrip_suffix);
  3798. +  if (strip_file_name == 0)
  3799. +    strip_file_name = find_a_file (&cpath, strip_suffix);
  3800. +  if (strip_file_name == 0)
  3801. +    strip_file_name = find_a_file (&path, full_strip_suffix);
  3802. +
  3803. +  /* Determine the full path name of the C compiler to use.  */
  3804. +  c_file_name = getenv ("COLLECT_GCC");
  3805. +  if (c_file_name == 0)
  3806. +    {
  3807. +#ifdef CROSS_COMPILE
  3808. +      c_file_name = xcalloc (sizeof ("gcc-") + strlen (target_machine) + 1, 1);
  3809. +      strcpy (c_file_name, target_machine);
  3810. +      strcat (c_file_name, "-gcc");
  3811. +#else
  3812. +      c_file_name = "gcc";
  3813. +#endif
  3814. +    }
  3815. +
  3816. +  p = find_a_file (&cpath, c_file_name);
  3817. +
  3818. +  /* Here it should be safe to use the system search path since we should have
  3819. +     already qualified the name of the compiler when it is needed.  */
  3820. +  if (p == 0)
  3821. +    p = find_a_file (&path, c_file_name);
  3822. +
  3823. +  if (p)
  3824. +    c_file_name = p;
  3825. +
  3826. +  *ld1++ = *ld2++ = ld_file_name;
  3827. +
  3828. +  /* Make temp file names.  */
  3829. +  c_file = make_temp_file (".c");
  3830. +  o_file = make_temp_file (".o");
  3831. +#ifdef COLLECT_EXPORT_LIST
  3832. +  export_file = make_temp_file (".x");
  3833. +  import_file = make_temp_file (".p");
  3834. +#endif
  3835. +  ldout = make_temp_file (".ld");
  3836. +  *c_ptr++ = c_file_name;
  3837. +  *c_ptr++ = "-x";
  3838. +  *c_ptr++ = "c";
  3839. +  *c_ptr++ = "-c";
  3840. +  *c_ptr++ = "-o";
  3841. +  *c_ptr++ = o_file;
  3842. +
  3843. +#ifdef COLLECT_EXPORT_LIST
  3844. +  /* Generate a list of directories from LIBPATH.  */
  3845. +  prefix_from_env ("LIBPATH", &libpath_lib_dirs);
  3846. +  /* Add to this list also two standard directories where
  3847. +     AIX loader always searches for libraries.  */
  3848. +  add_prefix (&libpath_lib_dirs, "/lib");
  3849. +  add_prefix (&libpath_lib_dirs, "/usr/lib");
  3850. +#endif
  3851. +
  3852. +  /* Get any options that the upper GCC wants to pass to the sub-GCC.  
  3853. +
  3854. +     AIX support needs to know if -shared has been specified before
  3855. +     parsing commandline arguments.  */
  3856. +
  3857. +  p = getenv ("COLLECT_GCC_OPTIONS");
  3858. +  while (p && *p)
  3859. +    {
  3860. +      char *q = extract_string (&p);
  3861. +      if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
  3862. +    *c_ptr++ = obstack_copy0 (&permanent_obstack, q, strlen (q));
  3863. +      if (strcmp (q, "-EL") == 0 || strcmp (q, "-EB") == 0)
  3864. +    *c_ptr++ = obstack_copy0 (&permanent_obstack, q, strlen (q));
  3865. +      if (strncmp (q, "-shared", sizeof ("-shared") - 1) == 0)
  3866. +    shared_obj = 1;
  3867. +    }
  3868. +  obstack_free (&temporary_obstack, temporary_firstobj);
  3869. +  *c_ptr++ = "-fno-exceptions";
  3870. +
  3871. +  /* !!! When GCC calls collect2,
  3872. +     it does not know whether it is calling collect2 or ld.
  3873. +     So collect2 cannot meaningfully understand any options
  3874. +     except those ld understands.
  3875. +     If you propose to make GCC pass some other option,
  3876. +     just imagine what will happen if ld is really ld!!!  */
  3877. +
  3878. +  /* Parse arguments.  Remember output file spec, pass the rest to ld.  */
  3879. +  /* After the first file, put in the c++ rt0.  */
  3880. +
  3881. +  first_file = 1;
  3882. +  while ((arg = *++argv) != (char *) 0)
  3883. +    {
  3884. +      *ld1++ = *ld2++ = arg;
  3885. +
  3886. +      if (arg[0] == '-')
  3887. +    {
  3888. +      switch (arg[1])
  3889. +        {
  3890. +#ifdef COLLECT_EXPORT_LIST
  3891. +        /* We want to disable automatic exports on AIX when user
  3892. +           explicitly puts an export list in command line */
  3893. +        case 'b':
  3894. +          if (arg[2] == 'E' || strncmp (&arg[2], "export", 6) == 0)
  3895. +                export_flag = 1;
  3896. +          else if (arg[2] == '6' && arg[3] == '4')
  3897. +        aix64_flag = 1;
  3898. +          break;
  3899. +#endif
  3900. +
  3901. +        case 'd':
  3902. +          if (!strcmp (arg, "-debug"))
  3903. +        {
  3904. +          /* Already parsed.  */
  3905. +          ld1--;
  3906. +          ld2--;
  3907. +        }
  3908. +          break;
  3909. +
  3910. +        case 'l':
  3911. +          if (first_file)
  3912. +        {
  3913. +          /* place o_file BEFORE this argument! */
  3914. +          first_file = 0;
  3915. +          ld2--;
  3916. +          *ld2++ = o_file;
  3917. +          *ld2++ = arg;
  3918. +        }
  3919. +#ifdef COLLECT_EXPORT_LIST
  3920. +          {
  3921. +            /* Resolving full library name.  */
  3922. +        char *s = resolve_lib_name (arg+2);
  3923. +
  3924. +        /* If we will use an import list for this library,
  3925. +           we should exclude it from ld args.  */
  3926. +        if (use_import_list (s))
  3927. +          {
  3928. +            ld1--;
  3929. +            ld2--;
  3930. +          }
  3931. +
  3932. +        /* Saving a full library name.  */
  3933. +        add_to_list (&libs, s);
  3934. +          }
  3935. +#endif
  3936. +          break;
  3937. +
  3938. +#ifdef COLLECT_EXPORT_LIST
  3939. +        /* Saving directories where to search for libraries.  */
  3940. +               case 'L':
  3941. +          add_prefix (&cmdline_lib_dirs, arg+2);
  3942. +          break;
  3943. +#endif
  3944. +
  3945. +        case 'o':
  3946. +          if (arg[2] == '\0')
  3947. +        output_file = *ld1++ = *ld2++ = *++argv;
  3948. +          else
  3949. +        output_file = &arg[2];
  3950. +          break;
  3951. +
  3952. +        case 'r':
  3953. +          if (arg[2] == '\0')
  3954. +        rflag = 1;
  3955. +          break;
  3956. +
  3957. +        case 's':
  3958. +          if (arg[2] == '\0' && do_collecting)
  3959. +        {
  3960. +          /* We must strip after the nm run, otherwise C++ linking
  3961. +             will not work.  Thus we strip in the second ld run, or
  3962. +             else with strip if there is no second ld run.  */
  3963. +          strip_flag = 1;
  3964. +          ld1--;
  3965. +        }
  3966. +          break;
  3967. +
  3968. +        case 'v':
  3969. +          if (arg[2] == '\0')
  3970. +        vflag = 1;
  3971. +          break;
  3972. +        }
  3973. +    }
  3974. +      else if ((p = rindex (arg, '.')) != (char *) 0
  3975. +           && (strcmp (p, ".o") == 0 || strcmp (p, ".a") == 0
  3976. +           || strcmp (p, ".so") == 0))
  3977. +    {
  3978. +      if (first_file)
  3979. +        {
  3980. +          first_file = 0;
  3981. +          if (p[1] == 'o')
  3982. +        *ld2++ = o_file;
  3983. +          else
  3984. +        {
  3985. +          /* place o_file BEFORE this argument! */
  3986. +          ld2--;
  3987. +          *ld2++ = o_file;
  3988. +          *ld2++ = arg;
  3989. +        }
  3990. +        }
  3991. +      if (p[1] == 'o')
  3992. +        *object++ = arg;
  3993. +#ifdef COLLECT_EXPORT_LIST
  3994. +      /* libraries can be specified directly, i.e. without -l flag.  */
  3995. +             else
  3996. +               { 
  3997. +          /* If we will use an import list for this library,
  3998. +         we should exclude it from ld args.  */
  3999. +          if (use_import_list (arg))
  4000. +            {
  4001. +          ld1--;
  4002. +          ld2--;
  4003. +        }
  4004. +
  4005. +          /* Saving a full library name.  */
  4006. +              add_to_list (&libs, arg);
  4007. +            }
  4008. +#endif
  4009. +    }
  4010. +    }
  4011. +
  4012. +#ifdef COLLECT_EXPORT_LIST
  4013. +  /* This is added only for debugging purposes.  */
  4014. +  if (debug)
  4015. +    {
  4016. +      fprintf (stderr, "List of libraries:\n");
  4017. +      dump_list (stderr, "\t", libs.first);
  4018. +    }
  4019. +
  4020. +  /* The AIX linker will discard static constructors in object files if
  4021. +     nothing else in the file is referenced, so look at them first.  */
  4022. +  {
  4023. +      char **export_object_lst = object_lst;
  4024. +      while (export_object_lst < object)
  4025. +    scan_prog_file (*export_object_lst++, PASS_OBJ);
  4026. +  }
  4027. +  {
  4028. +    struct id *list = libs.first;
  4029. +    for (; list; list = list->next)
  4030. +      scan_prog_file (list->name, PASS_FIRST);
  4031. +  }
  4032. +  {
  4033. +    char *buf1 = alloca (strlen (export_file) + 5);
  4034. +    char *buf2 = alloca (strlen (import_file) + 5);
  4035. +    sprintf (buf1, "-bE:%s", export_file);
  4036. +    sprintf (buf2, "-bI:%s", import_file);
  4037. +    *ld1++ = buf1;
  4038. +    *ld2++ = buf1;
  4039. +    *ld1++ = buf2;
  4040. +    *ld2++ = buf2;
  4041. +    exportf = fopen (export_file, "w");
  4042. +    if (exportf == (FILE *) 0)
  4043. +      fatal_perror ("fopen %s", export_file);
  4044. +    write_export_file (exportf);
  4045. +    if (fclose (exportf))
  4046. +      fatal_perror ("fclose %s", export_file);
  4047. +    importf = fopen (import_file, "w");
  4048. +    if (importf == (FILE *) 0)
  4049. +      fatal_perror ("%s", import_file);
  4050. +    write_import_file (importf);
  4051. +    if (fclose (importf))
  4052. +      fatal_perror ("fclose %s", import_file);
  4053. +  }
  4054. +#endif
  4055. +
  4056. +  *c_ptr++ = c_file;
  4057. +  *object = *c_ptr = *ld1 = (char *) 0;
  4058. +
  4059. +  if (vflag)
  4060. +    {
  4061. +      notice ("collect2 version %s", version_string);
  4062. +#ifdef TARGET_VERSION
  4063. +      TARGET_VERSION;
  4064. +#endif
  4065. +      fprintf (stderr, "\n");
  4066. +    }
  4067. +
  4068. +  if (debug)
  4069. +    {
  4070. +      char *ptr;
  4071. +      fprintf (stderr, "ld_file_name        = %s\n",
  4072. +           (ld_file_name ? ld_file_name : "not found"));
  4073. +      fprintf (stderr, "c_file_name         = %s\n",
  4074. +           (c_file_name ? c_file_name : "not found"));
  4075. +      fprintf (stderr, "nm_file_name        = %s\n",
  4076. +           (nm_file_name ? nm_file_name : "not found"));
  4077. +#ifdef LDD_SUFFIX
  4078. +      fprintf (stderr, "ldd_file_name       = %s\n",
  4079. +           (ldd_file_name ? ldd_file_name : "not found"));
  4080. +#endif
  4081. +      fprintf (stderr, "strip_file_name     = %s\n",
  4082. +           (strip_file_name ? strip_file_name : "not found"));
  4083. +      fprintf (stderr, "c_file              = %s\n",
  4084. +           (c_file ? c_file : "not found"));
  4085. +      fprintf (stderr, "o_file              = %s\n",
  4086. +           (o_file ? o_file : "not found"));
  4087. +
  4088. +      ptr = getenv ("COLLECT_GCC_OPTIONS");
  4089. +      if (ptr)
  4090. +    fprintf (stderr, "COLLECT_GCC_OPTIONS = %s\n", ptr);
  4091. +
  4092. +      ptr = getenv ("COLLECT_GCC");
  4093. +      if (ptr)
  4094. +    fprintf (stderr, "COLLECT_GCC         = %s\n", ptr);
  4095. +
  4096. +      ptr = getenv ("COMPILER_PATH");
  4097. +      if (ptr)
  4098. +    fprintf (stderr, "COMPILER_PATH       = %s\n", ptr);
  4099. +
  4100. +      ptr = getenv ("LIBRARY_PATH");
  4101. +      if (ptr)
  4102. +    fprintf (stderr, "LIBRARY_PATH        = %s\n", ptr);
  4103. +
  4104. +      fprintf (stderr, "\n");
  4105. +
  4106. +    }
  4107. +
  4108. +  /* Load the program, searching all libraries and attempting to provide
  4109. +     undefined symbols from repository information.  */
  4110. +
  4111. +  /* On AIX we do this later.  */
  4112. +#ifndef COLLECT_EXPORT_LIST
  4113. +  do_tlink (ld1_argv, object_lst);
  4114. +#endif
  4115. +
  4116. +  /* If -r or they will be run via some other method, do not build the
  4117. +     constructor or destructor list, just return now.  */
  4118. +  if (rflag
  4119. +#ifndef COLLECT_EXPORT_LIST
  4120. +      || ! do_collecting
  4121. +#endif
  4122. +      )
  4123. +    {
  4124. +#ifdef COLLECT_EXPORT_LIST
  4125. +      /* Do the link we avoided above if we are exiting.  */
  4126. +      do_tlink (ld1_argv, object_lst);
  4127. +
  4128. +      /* But make sure we delete the export file we may have created.  */
  4129. +      if (export_file != 0 && export_file[0])
  4130. +    maybe_unlink (export_file);
  4131. +      if (import_file != 0 && import_file[0])
  4132. +    maybe_unlink (import_file);
  4133. +#endif
  4134. +      maybe_unlink (c_file);
  4135. +      maybe_unlink (o_file);
  4136. +      return 0;
  4137. +    }
  4138. +
  4139. +  /* Examine the namelist with nm and search it for static constructors
  4140. +     and destructors to call.
  4141. +     Write the constructor and destructor tables to a .s file and reload.  */
  4142. +
  4143. +  /* On AIX we already done scanning for global constructors/destructors.  */
  4144. +#ifndef COLLECT_EXPORT_LIST
  4145. +  empty_undef_list();
  4146. +  scan_prog_file (output_file, PASS_FIRST);
  4147. +  report_undef_list(object_lst);
  4148. +#endif
  4149. +
  4150. +#ifdef SCAN_LIBRARIES
  4151. +  scan_libraries (output_file);
  4152. +#endif
  4153. +
  4154. +  if (debug)
  4155. +    {
  4156. +      notice ("%d constructor(s) found\n", constructors.number);
  4157. +      notice ("%d destructor(s)  found\n", destructors.number);
  4158. +      notice ("%d frame table(s) found\n", frame_tables.number);
  4159. +    }
  4160. +
  4161. +  if (constructors.number == 0 && destructors.number == 0
  4162. +      && frame_tables.number == 0
  4163. +#if defined (SCAN_LIBRARIES) || defined (COLLECT_EXPORT_LIST)
  4164. +      /* If we will be running these functions ourselves, we want to emit
  4165. +     stubs into the shared library so that we do not have to relink
  4166. +     dependent programs when we add static objects.  */
  4167. +      && ! shared_obj
  4168. +#endif
  4169. +      )
  4170. +    {
  4171. +#ifdef COLLECT_EXPORT_LIST
  4172. +      /* Doing tlink without additional code generation */
  4173. +      do_tlink (ld1_argv, object_lst);
  4174. +#endif
  4175. +      /* Strip now if it was requested on the command line.  */
  4176. +      if (strip_flag)
  4177. +    {
  4178. +      char **strip_argv = (char **) xcalloc (sizeof (char *), 5);
  4179. +      strip_argv[0] = strip_file_name;
  4180. +      strip_argv[1] = "--strip-debug";
  4181. +      strip_argv[2] = "--strip-unneeded";
  4182. +      strip_argv[3] = output_file;
  4183. +      strip_argv[4] = (char *) 0;
  4184. +      fork_execute ("strip", strip_argv);
  4185. +    }
  4186. +
  4187. +#ifdef COLLECT_EXPORT_LIST
  4188. +      maybe_unlink (export_file);
  4189. +      maybe_unlink (import_file);
  4190. +#endif
  4191. +      maybe_unlink (c_file);
  4192. +      maybe_unlink (o_file);
  4193. +      return 0;
  4194. +    }
  4195. +
  4196. +  /* Sort ctor and dtor lists by priority. */
  4197. +  sort_ids (&constructors);
  4198. +  sort_ids (&destructors);
  4199. +
  4200. +  maybe_unlink(output_file);
  4201. +  outf = fopen (c_file, "w");
  4202. +  if (outf == (FILE *) 0)
  4203. +    fatal_perror ("fopen %s", c_file);
  4204. +
  4205. +  write_c_file (outf, c_file);
  4206. +
  4207. +  if (fclose (outf))
  4208. +    fatal_perror ("fclose %s", c_file);
  4209. +
  4210. +  /* Tell the linker that we have initializer and finalizer functions.  */
  4211. +#ifdef LD_INIT_SWITCH
  4212. +  *ld2++ = LD_INIT_SWITCH;
  4213. +  *ld2++ = initname;
  4214. +  *ld2++ = LD_FINI_SWITCH;
  4215. +  *ld2++ = fininame;
  4216. +#endif
  4217. +  *ld2 = (char*) 0;
  4218. +
  4219. +#ifdef COLLECT_EXPORT_LIST
  4220. +  if (shared_obj)
  4221. +    {
  4222. +      add_to_list (&exports, initname);
  4223. +      add_to_list (&exports, fininame);
  4224. +      add_to_list (&exports, "_GLOBAL__DI");
  4225. +      add_to_list (&exports, "_GLOBAL__DD");
  4226. +      exportf = fopen (export_file, "w");
  4227. +      if (exportf == (FILE *) 0)
  4228. +    fatal_perror ("fopen %s", export_file);
  4229. +      write_export_file (exportf);
  4230. +      if (fclose (exportf))
  4231. +    fatal_perror ("fclose %s", export_file);
  4232. +    }
  4233. +#endif
  4234. +
  4235. +  if (debug)
  4236. +    {
  4237. +      fprintf (stderr, "\n========== output_file = %s, c_file = %s\n",
  4238. +           output_file, c_file);
  4239. +      write_c_file (stderr, "stderr");
  4240. +      fprintf (stderr, "========== end of c_file\n\n");
  4241. +#ifdef COLLECT_EXPORT_LIST
  4242. +      fprintf (stderr, "\n========== export_file = %s\n", export_file);
  4243. +      write_export_file (stderr);
  4244. +      fprintf (stderr, "========== end of export_file\n\n");
  4245. +#endif
  4246. +    }
  4247. +
  4248. +  /* Assemble the constructor and destructor tables.
  4249. +     Link the tables in with the rest of the program.  */
  4250. +
  4251. +  fork_execute ("gcc",  c_argv);
  4252. +#ifdef COLLECT_EXPORT_LIST
  4253. +  /* On AIX we must call tlink because of possible templates resolution */
  4254. +  do_tlink (ld2_argv, object_lst);
  4255. +#else
  4256. +  /* Otherwise, simply call ld because tlink is already done */
  4257. +  fork_execute ("ld", ld2_argv);
  4258. +
  4259. +  /* Let scan_prog_file do any final mods (OSF/rose needs this for
  4260. +     constructors/destructors in shared libraries.  */
  4261. +  scan_prog_file (output_file, PASS_SECOND);
  4262. +#endif 
  4263. +
  4264. +  maybe_unlink (c_file);
  4265. +  maybe_unlink (o_file);
  4266. +
  4267. +#ifdef COLLECT_EXPORT_LIST
  4268. +  maybe_unlink (export_file);
  4269. +  maybe_unlink (import_file);
  4270. +#endif
  4271. +
  4272. +  return 0;
  4273. +}
  4274. +
  4275. +
  4276. +/* Wait for a process to finish, and exit if a non-zero status is found.  */
  4277. +
  4278. +int
  4279. +collect_wait (prog)
  4280. +     char *prog;
  4281. +{
  4282. +  int status;
  4283. +
  4284. +  pwait (pexecute_pid, &status, 0);
  4285. +  if (status)
  4286. +    {
  4287. +      if (WIFSIGNALED (status))
  4288. +    {
  4289. +      int sig = WTERMSIG (status);
  4290. +      error ((status & 0200
  4291. +          ? "%s terminated with signal %d [%s]"
  4292. +          : "%s terminated with signal %d [%s], core dumped"),
  4293. +         prog,
  4294. +         sig,
  4295. +         my_strsignal(sig));
  4296. +      collect_exit (FATAL_EXIT_CODE);
  4297. +    }
  4298. +
  4299. +      if (WIFEXITED (status))
  4300. +    return WEXITSTATUS (status);
  4301. +    }
  4302. +  return 0;
  4303. +}
  4304. +
  4305. +static void
  4306. +do_wait (prog)
  4307. +     char *prog;
  4308. +{
  4309. +  int ret = collect_wait (prog);
  4310. +  if (ret != 0)
  4311. +    {
  4312. +      error ("%s returned %d exit status", prog, ret);
  4313. +      collect_exit (ret);
  4314. +    }
  4315. +}
  4316. +
  4317. +
  4318. +/* Execute a program, and wait for the reply.  */
  4319. +
  4320. +void
  4321. +collect_execute (prog, argv, redir)
  4322. +     char *prog;
  4323. +     char **argv;
  4324. +     char *redir;
  4325. +{
  4326. +  char *errmsg_fmt;
  4327. +  char *errmsg_arg;
  4328. +  int redir_handle = -1;
  4329. +  int stdout_save = -1;
  4330. +  int stderr_save = -1;
  4331. +
  4332. +  if (vflag || debug)
  4333. +    {
  4334. +      char **p_argv;
  4335. +      char *str;
  4336. +
  4337. +      if (argv[0])
  4338. +    fprintf (stderr, "%s", argv[0]);
  4339. +      else
  4340. +    notice ("[cannot find %s]", prog);
  4341. +
  4342. +      for (p_argv = &argv[1]; (str = *p_argv) != (char *) 0; p_argv++)
  4343. +    fprintf (stderr, " %s", str);
  4344. +
  4345. +      fprintf (stderr, "\n");
  4346. +    }
  4347. +
  4348. +  fflush (stdout);
  4349. +  fflush (stderr);
  4350. +
  4351. +  /* If we cannot find a program we need, complain error.  Do this here
  4352. +     since we might not end up needing something that we could not find.  */
  4353. +
  4354. +  if (argv[0] == 0)
  4355. +    fatal ("cannot find `%s'", prog);
  4356. +
  4357. +  if (redir)
  4358. +    {
  4359. +      /* Open response file.  */
  4360. +      redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);
  4361. +
  4362. +      /* Duplicate the stdout and stderr file handles
  4363. +     so they can be restored later.  */
  4364. +      stdout_save = dup (STDOUT_FILENO);
  4365. +      if (stdout_save == -1)
  4366. +    fatal_perror ("redirecting stdout: %s", redir);
  4367. +      stderr_save = dup (STDERR_FILENO);
  4368. +      if (stderr_save == -1)
  4369. +    fatal_perror ("redirecting stdout: %s", redir);
  4370. +
  4371. +      /* Redirect stdout & stderr to our response file.  */
  4372. +      dup2 (redir_handle, STDOUT_FILENO);
  4373. +      dup2 (redir_handle, STDERR_FILENO);
  4374. +    }
  4375. +
  4376. +  pexecute_pid = pexecute (argv[0], argv, argv[0], NULL,
  4377. +               &errmsg_fmt, &errmsg_arg,
  4378. +               (PEXECUTE_FIRST | PEXECUTE_LAST | PEXECUTE_SEARCH));
  4379. +
  4380. +  if (redir)
  4381. +    {
  4382. +      /* Restore stdout and stderr to their previous settings.  */
  4383. +      dup2 (stdout_save, STDOUT_FILENO);
  4384. +      dup2 (stderr_save, STDERR_FILENO);
  4385. +
  4386. +      /* Close reponse file.  */
  4387. +      close (redir_handle);
  4388. +    }
  4389. +
  4390. + if (pexecute_pid == -1)
  4391. +   fatal_perror (errmsg_fmt, errmsg_arg);
  4392. +}
  4393. +
  4394. +static void
  4395. +fork_execute (prog, argv)
  4396. +     char *prog;
  4397. +     char **argv;
  4398. +{
  4399. +  collect_execute (prog, argv, NULL);
  4400. +  do_wait (prog);
  4401. +}
  4402. +
  4403. +/* Unlink a file unless we are debugging.  */
  4404. +
  4405. +static void
  4406. +maybe_unlink (file)
  4407. +     char *file;
  4408. +{
  4409. +  if (!debug)
  4410. +    unlink (file);
  4411. +  else
  4412. +    notice ("[Leaving %s]\n", file);
  4413. +}
  4414. +
  4415. +
  4416. +static long sequence_number = 0;
  4417. +
  4418. +/* Add a name to a linked list.  */
  4419. +
  4420. +static void
  4421. +add_to_list (head_ptr, name)
  4422. +     struct head *head_ptr;
  4423. +     char *name;
  4424. +{
  4425. +  struct id *newid
  4426. +    = (struct id *) xcalloc (sizeof (struct id) + strlen (name), 1);
  4427. +  struct id *p;
  4428. +  strcpy (newid->name, name);
  4429. +
  4430. +  if (head_ptr->first)
  4431. +    head_ptr->last->next = newid;
  4432. +  else
  4433. +    head_ptr->first = newid;
  4434. +
  4435. +  /* Check for duplicate symbols.  */
  4436. +  for (p = head_ptr->first;
  4437. +       strcmp (name, p->name) != 0;
  4438. +       p = p->next)
  4439. +    ;
  4440. +  if (p != newid)
  4441. +    {
  4442. +      head_ptr->last->next = 0;
  4443. +      free (newid);
  4444. +      return;
  4445. +    }
  4446. +
  4447. +  newid->sequence = ++sequence_number;
  4448. +  head_ptr->last = newid;
  4449. +  head_ptr->number++;
  4450. +}
  4451. +
  4452. +/* Grab the init priority number from an init function name that
  4453. +   looks like "_GLOBAL_.I.12345.foo".  */
  4454. +
  4455. +static int
  4456. +extract_init_priority (name)
  4457. +     char *name;
  4458. +{
  4459. +  int pos = 0, pri;
  4460. +
  4461. +  while (name[pos] == '_')
  4462. +    ++pos;
  4463. +  pos += 10; /* strlen ("GLOBAL__X_") */
  4464. +
  4465. +  /* Extract init_p number from ctor/dtor name. */
  4466. +  pri = atoi (name + pos);
  4467. +  return pri ? pri : DEFAULT_INIT_PRIORITY;
  4468. +}
  4469. +
  4470. +/* Insertion sort the ids from ctor/dtor list HEAD_PTR in descending order.
  4471. +   ctors will be run from right to left, dtors from left to right.  */
  4472. +
  4473. +static void
  4474. +sort_ids (head_ptr)
  4475. +     struct head *head_ptr;
  4476. +{
  4477. +  /* id holds the current element to insert.  id_next holds the next
  4478. +     element to insert.  id_ptr iterates through the already sorted elements
  4479. +     looking for the place to insert id.  */
  4480. +  struct id *id, *id_next, **id_ptr;
  4481. +
  4482. +  id = head_ptr->first;
  4483. +
  4484. +  /* We don't have any sorted elements yet.  */
  4485. +  head_ptr->first = NULL;
  4486. +
  4487. +  for (; id; id = id_next)
  4488. +    {
  4489. +      id_next = id->next;
  4490. +      id->sequence = extract_init_priority (id->name);
  4491. +
  4492. +      for (id_ptr = &(head_ptr->first); ; id_ptr = &((*id_ptr)->next))
  4493. +    if (*id_ptr == NULL
  4494. +        /* If the sequence numbers are the same, we put the id from the
  4495. +           file later on the command line later in the list.  */
  4496. +        || id->sequence > (*id_ptr)->sequence
  4497. +        /* Hack: do lexical compare, too.
  4498. +        || (id->sequence == (*id_ptr)->sequence
  4499. +            && strcmp (id->name, (*id_ptr)->name) > 0) */
  4500. +        )
  4501. +      {
  4502. +        id->next = *id_ptr;
  4503. +        *id_ptr = id;
  4504. +        break;
  4505. +      }
  4506. +    }
  4507. +
  4508. +  /* Now set the sequence numbers properly so write_c_file works.  */
  4509. +  for (id = head_ptr->first; id; id = id->next)
  4510. +    id->sequence = ++sequence_number;
  4511. +}
  4512. +
  4513. +/* Write: `prefix', the names on list LIST, `suffix'.  */
  4514. +
  4515. +static void
  4516. +write_list (stream, prefix, list)
  4517. +     FILE *stream;
  4518. +     char *prefix;
  4519. +     struct id *list;
  4520. +{
  4521. +  while (list)
  4522. +    {
  4523. +      fprintf (stream, "%sx%d,\n", prefix, list->sequence);
  4524. +      list = list->next;
  4525. +    }
  4526. +}
  4527. +
  4528. +#ifdef COLLECT_EXPORT_LIST
  4529. +/* This function is really used only on AIX, but may be useful.  */
  4530. +static int
  4531. +is_in_list (prefix, list)
  4532. +     char *prefix;
  4533. +     struct id *list;
  4534. +{
  4535. +  while (list)
  4536. +    {
  4537. +      if (!strcmp (prefix, list->name)) return 1;
  4538. +      list = list->next;
  4539. +    }
  4540. +    return 0;
  4541. +}
  4542. +#endif
  4543. +
  4544. +/* Added for debugging purpose.  */
  4545. +#ifdef COLLECT_EXPORT_LIST
  4546. +static void
  4547. +dump_list (stream, prefix, list)
  4548. +     FILE *stream;
  4549. +     char *prefix;
  4550. +     struct id *list;
  4551. +{
  4552. +  while (list)
  4553. +    {
  4554. +      fprintf (stream, "%s%s,\n", prefix, list->name);
  4555. +      list = list->next;
  4556. +    }
  4557. +}
  4558. +#endif
  4559. +
  4560. +#if 0
  4561. +static void
  4562. +dump_prefix_list (stream, prefix, list)
  4563. +     FILE *stream;
  4564. +     char *prefix;
  4565. +     struct prefix_list *list;
  4566. +{
  4567. +  while (list)
  4568. +    {
  4569. +      fprintf (stream, "%s%s,\n", prefix, list->prefix);
  4570. +      list = list->next;
  4571. +    }
  4572. +}
  4573. +#endif
  4574. +
  4575. +static void
  4576. +write_list_with_asm (stream, prefix, list)
  4577. +     FILE *stream;
  4578. +     char *prefix;
  4579. +     struct id *list;
  4580. +{
  4581. +  while (list)
  4582. +    {
  4583. +      fprintf (stream, "%sx%d __asm__ (\"%s\");\n",
  4584. +           prefix, list->sequence, list->name);
  4585. +      list = list->next;
  4586. +    }
  4587. +}
  4588. +
  4589. +/* Write out the constructor and destructor tables statically (for a shared
  4590. +   object), along with the functions to execute them.  */
  4591. +
  4592. +static void
  4593. +write_c_file_stat (stream, name)
  4594. +     FILE *stream;
  4595. +     char *name;
  4596. +{
  4597. +  char *prefix, *p, *q;
  4598. +  int frames = (frame_tables.number > 0);
  4599. +
  4600. +  /* Figure out name of output_file, stripping off .so version.  */
  4601. +  p = rindex (output_file, '/');
  4602. +  if (p == 0)
  4603. +    p = (char *) output_file;
  4604. +  else
  4605. +    p++;
  4606. +  q = p;
  4607. +  while (q)
  4608. +    {
  4609. +      q = index (q,'.');
  4610. +      if (q == 0)
  4611. +    {
  4612. +      q = p + strlen (p);
  4613. +      break;
  4614. +    }
  4615. +      else
  4616. +    {
  4617. +      if (strncmp (q, ".so", 3) == 0)
  4618. +        {
  4619. +          q += 3;
  4620. +          break;
  4621. +        }
  4622. +      else
  4623. +        q++;
  4624. +    }
  4625. +    }
  4626. +  /* q points to null at end of the string (or . of the .so version) */
  4627. +  prefix = xmalloc (q - p + 1);
  4628. +  strncpy (prefix, p, q - p);
  4629. +  prefix[q - p] = 0;
  4630. +  for (q = prefix; *q; q++)
  4631. +    if (!ISALNUM ((unsigned char)*q))
  4632. +      *q = '_';
  4633. +  if (debug)
  4634. +    notice ("\nwrite_c_file - output name is %s, prefix is %s\n",
  4635. +        output_file, prefix);
  4636. +
  4637. +#define INIT_NAME_FORMAT "_GLOBAL__FI_%s"
  4638. +  initname = xmalloc (strlen (prefix) + sizeof (INIT_NAME_FORMAT) - 2);
  4639. +  sprintf (initname, INIT_NAME_FORMAT, prefix);
  4640. +
  4641. +#define FINI_NAME_FORMAT "_GLOBAL__FD_%s"
  4642. +  fininame = xmalloc (strlen (prefix) + sizeof (FINI_NAME_FORMAT) - 2);
  4643. +  sprintf (fininame, FINI_NAME_FORMAT, prefix);
  4644. +
  4645. +  free (prefix);
  4646. +
  4647. +  /* Write the tables as C code  */
  4648. +
  4649. +  fprintf (stream, "static int count;\n");
  4650. +  fprintf (stream, "typedef void entry_pt();\n");
  4651. +  write_list_with_asm (stream, "extern entry_pt ", constructors.first);
  4652. +
  4653. +  if (frames)
  4654. +    {
  4655. +      write_list_with_asm (stream, "extern void *", frame_tables.first);
  4656. +
  4657. +      fprintf (stream, "\tstatic void *frame_table[] = {\n");
  4658. +      write_list (stream, "\t\t&", frame_tables.first);
  4659. +      fprintf (stream, "\t0\n};\n");
  4660. +
  4661. +      /* This must match what's in frame.h.  */
  4662. +      fprintf (stream, "struct object {\n");
  4663. +      fprintf (stream, "  void *pc_begin;\n");
  4664. +      fprintf (stream, "  void *pc_end;\n");
  4665. +      fprintf (stream, "  void *fde_begin;\n");
  4666. +      fprintf (stream, "  void *fde_array;\n");
  4667. +      fprintf (stream, "  __SIZE_TYPE__ count;\n");
  4668. +      fprintf (stream, "  struct object *next;\n");
  4669. +      fprintf (stream, "};\n");
  4670. +
  4671. +      fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
  4672. +      fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
  4673. +
  4674. +      fprintf (stream, "static void reg_frame () {\n");
  4675. +      fprintf (stream, "\tstatic struct object ob;\n");
  4676. +      fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
  4677. +      fprintf (stream, "\t}\n");
  4678. +
  4679. +      fprintf (stream, "static void dereg_frame () {\n");
  4680. +      fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
  4681. +      fprintf (stream, "\t}\n");
  4682. +    }
  4683. +
  4684. +  fprintf (stream, "void %s() {\n", initname);
  4685. +  if (constructors.number > 0 || frames)
  4686. +    {
  4687. +      fprintf (stream, "\tstatic entry_pt *ctors[] = {\n");
  4688. +      write_list (stream, "\t\t", constructors.first);
  4689. +      if (frames)
  4690. +    fprintf (stream, "\treg_frame,\n");
  4691. +      fprintf (stream, "\t};\n");
  4692. +      fprintf (stream, "\tentry_pt **p;\n");
  4693. +      fprintf (stream, "\tif (count++ != 0) return;\n");
  4694. +      fprintf (stream, "\tp = ctors + %d;\n", constructors.number + frames);
  4695. +      fprintf (stream, "\twhile (p > ctors) (*--p)();\n");
  4696. +    }
  4697. +  else
  4698. +    fprintf (stream, "\t++count;\n");
  4699. +  fprintf (stream, "}\n");
  4700. +  write_list_with_asm (stream, "extern entry_pt ", destructors.first);
  4701. +  fprintf (stream, "void %s() {\n", fininame);
  4702. +  if (destructors.number > 0 || frames)
  4703. +    {
  4704. +      fprintf (stream, "\tstatic entry_pt *dtors[] = {\n");
  4705. +      write_list (stream, "\t\t", destructors.first);
  4706. +      if (frames)
  4707. +    fprintf (stream, "\tdereg_frame,\n");
  4708. +      fprintf (stream, "\t};\n");
  4709. +      fprintf (stream, "\tentry_pt **p;\n");
  4710. +      fprintf (stream, "\tif (--count != 0) return;\n");
  4711. +      fprintf (stream, "\tp = dtors;\n");
  4712. +      fprintf (stream, "\twhile (p < dtors + %d) (*p++)();\n",
  4713. +           destructors.number + frames);
  4714. +    }
  4715. +  fprintf (stream, "}\n");
  4716. +
  4717. +  if (shared_obj)
  4718. +    {
  4719. +      fprintf (stream, "void _GLOBAL__DI() {\n\t%s();\n}\n", initname);
  4720. +      fprintf (stream, "void _GLOBAL__DD() {\n\t%s();\n}\n", fininame);
  4721. +    }
  4722. +}
  4723. +
  4724. +/* Write the constructor/destructor tables.  */
  4725. +
  4726. +#ifndef LD_INIT_SWITCH
  4727. +static void
  4728. +write_c_file_glob (stream, name)
  4729. +     FILE *stream;
  4730. +     char *name;
  4731. +{
  4732. +  /* Write the tables as C code  */
  4733. +
  4734. +  int frames = (frame_tables.number > 0);
  4735. +
  4736. +  fprintf (stream, "typedef void entry_pt();\n\n");
  4737. +    
  4738. +  write_list_with_asm (stream, "extern entry_pt ", constructors.first);
  4739. +
  4740. +  if (frames)
  4741. +    {
  4742. +      write_list_with_asm (stream, "extern void *", frame_tables.first);
  4743. +
  4744. +      fprintf (stream, "\tstatic void *frame_table[] = {\n");
  4745. +      write_list (stream, "\t\t&", frame_tables.first);
  4746. +      fprintf (stream, "\t0\n};\n");
  4747. +
  4748. +      /* This must match what's in frame.h.  */
  4749. +      fprintf (stream, "struct object {\n");
  4750. +      fprintf (stream, "  void *pc_begin;\n");
  4751. +      fprintf (stream, "  void *pc_end;\n");
  4752. +      fprintf (stream, "  void *fde_begin;\n");
  4753. +      fprintf (stream, "  void *fde_array;\n");
  4754. +      fprintf (stream, "  __SIZE_TYPE__ count;\n");
  4755. +      fprintf (stream, "  struct object *next;\n");
  4756. +      fprintf (stream, "};\n");
  4757. +
  4758. +      fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
  4759. +      fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
  4760. +
  4761. +      fprintf (stream, "static void reg_frame () {\n");
  4762. +      fprintf (stream, "\tstatic struct object ob;\n");
  4763. +      fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
  4764. +      fprintf (stream, "\t}\n");
  4765. +
  4766. +      fprintf (stream, "static void dereg_frame () {\n");
  4767. +      fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
  4768. +      fprintf (stream, "\t}\n");
  4769. +    }
  4770. +
  4771. +  fprintf (stream, "\nentry_pt * __CTOR_LIST__[] = {\n");
  4772. +  fprintf (stream, "\t(entry_pt *) %d,\n", constructors.number + frames);
  4773. +  write_list (stream, "\t", constructors.first);
  4774. +  if (frames)
  4775. +    fprintf (stream, "\treg_frame,\n");
  4776. +  fprintf (stream, "\t0\n};\n\n");
  4777. +
  4778. +  write_list_with_asm (stream, "extern entry_pt ", destructors.first);
  4779. +
  4780. +  fprintf (stream, "\nentry_pt * __DTOR_LIST__[] = {\n");
  4781. +  fprintf (stream, "\t(entry_pt *) %d,\n", destructors.number + frames);
  4782. +  write_list (stream, "\t", destructors.first);
  4783. +  if (frames)
  4784. +    fprintf (stream, "\tdereg_frame,\n");
  4785. +  fprintf (stream, "\t0\n};\n\n");
  4786. +
  4787. +  fprintf (stream, "extern entry_pt %s;\n", NAME__MAIN);
  4788. +  fprintf (stream, "entry_pt *__main_reference = %s;\n\n", NAME__MAIN);
  4789. +}
  4790. +#endif /* ! LD_INIT_SWITCH */
  4791. +
  4792. +static void
  4793. +write_c_file (stream, name)
  4794. +     FILE *stream;
  4795. +     char *name;
  4796. +{
  4797. +  fprintf (stream, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n");
  4798. +#ifndef LD_INIT_SWITCH
  4799. +  if (! shared_obj)
  4800. +    write_c_file_glob (stream, name);
  4801. +  else
  4802. +#endif
  4803. +    write_c_file_stat (stream, name);
  4804. +  fprintf (stream, "#ifdef __cplusplus\n}\n#endif\n");
  4805. +}
  4806. +
  4807. +#ifdef COLLECT_EXPORT_LIST
  4808. +static void
  4809. +write_export_file (stream)
  4810. +     FILE *stream;
  4811. +{
  4812. +  struct id *list = exports.first;
  4813. +  for (; list; list = list->next)
  4814. +    fprintf (stream, "%s\n", list->name);
  4815. +}
  4816. +
  4817. +static void
  4818. +write_import_file (stream)
  4819. +     FILE *stream;
  4820. +{
  4821. +  struct id *list = imports.first;
  4822. +  fprintf (stream, "%s\n", "#! .");
  4823. +  for (; list; list = list->next)
  4824. +    fprintf (stream, "%s\n", list->name);
  4825. +}
  4826. +#endif
  4827. +
  4828. +#ifdef OBJECT_FORMAT_NONE
  4829. +
  4830. +/* Generic version to scan the name list of the loaded program for
  4831. +   the symbols g++ uses for static constructors and destructors.
  4832. +
  4833. +   The constructor table begins at __CTOR_LIST__ and contains a count
  4834. +   of the number of pointers (or -1 if the constructors are built in a
  4835. +   separate section by the linker), followed by the pointers to the
  4836. +   constructor functions, terminated with a null pointer.  The
  4837. +   destructor table has the same format, and begins at __DTOR_LIST__.  */
  4838. +#ifndef __amigaos4__
  4839. +static void
  4840. +scan_prog_file (prog_name, which_pass)
  4841. +     char *prog_name;
  4842. +     enum pass which_pass;
  4843. +{
  4844. +  void (*int_handler) ();
  4845. +  void (*quit_handler) ();
  4846. +  char *nm_argv[4];
  4847. +  int pid;
  4848. +  int argc = 0;
  4849. +  int pipe_fd[2];
  4850. +  char *p, buf[1024];
  4851. +  FILE *inf;
  4852. +
  4853. +  if (which_pass == PASS_SECOND)
  4854. +    return;
  4855. +
  4856. +  /* If we do not have an `nm', complain.  */
  4857. +  if (nm_file_name == 0)
  4858. +    fatal ("cannot find `nm'");
  4859. +
  4860. +  nm_argv[argc++] = nm_file_name;
  4861. +  if (NM_FLAGS[0] != '\0')
  4862. +    nm_argv[argc++] = NM_FLAGS;
  4863. +
  4864. +  nm_argv[argc++] = prog_name;
  4865. +  nm_argv[argc++] = (char *) 0;
  4866. +
  4867. +  if (pipe (pipe_fd) < 0)
  4868. +    fatal_perror ("pipe");
  4869. +
  4870. +  inf = fdopen (pipe_fd[0], "r");
  4871. +  if (inf == (FILE *) 0)
  4872. +    fatal_perror ("fdopen");
  4873. +
  4874. +  /* Trace if needed.  */
  4875. +  if (vflag)
  4876. +    {
  4877. +      char **p_argv;
  4878. +      char *str;
  4879. +
  4880. +      for (p_argv = &nm_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
  4881. +    fprintf (stderr, " %s", str);
  4882. +
  4883. +      fprintf (stderr, "\n");
  4884. +    }
  4885. +
  4886. +  fflush (stdout);
  4887. +  fflush (stderr);
  4888. +
  4889. +  /* Spawn child nm on pipe */
  4890. +  pid = vfork ();
  4891. +  if (pid == -1)
  4892. +    fatal_perror (VFORK_STRING);
  4893. +
  4894. +  if (pid == 0)            /* child context */
  4895. +    {
  4896. +      /* setup stdout */
  4897. +      if (dup2 (pipe_fd[1], 1) < 0)
  4898. +    fatal_perror ("dup2 %d 1", pipe_fd[1]);
  4899. +
  4900. +      if (close (pipe_fd[0]) < 0)
  4901. +    fatal_perror ("close %d", pipe_fd[0]);
  4902. +
  4903. +      if (close (pipe_fd[1]) < 0)
  4904. +    fatal_perror ("close %d", pipe_fd[1]);
  4905. +
  4906. +      execv (nm_file_name, nm_argv);
  4907. +      fatal_perror ("execvp %s", nm_file_name);
  4908. +    }
  4909. +
  4910. +  /* Parent context from here on.  */
  4911. +  int_handler  = (void (*) ())signal (SIGINT,  SIG_IGN);
  4912. +#ifdef SIGQUIT
  4913. +  quit_handler = (void (*) ())signal (SIGQUIT, SIG_IGN);
  4914. +#endif
  4915. +
  4916. +  if (close (pipe_fd[1]) < 0)
  4917. +    fatal_perror ("close %d", pipe_fd[1]);
  4918. +
  4919. +  if (debug)
  4920. +    fprintf (stderr, "\nnm output with constructors/destructors.\n");
  4921. +
  4922. +  /* Read each line of nm output.  */
  4923. +  while (fgets (buf, sizeof buf, inf) != (char *) 0)
  4924. +    {
  4925. +      int ch, ch2;
  4926. +      char *name, *end;
  4927. +      
  4928. +      /* If it contains a constructor or destructor name, add the name
  4929. +     to the appropriate list.  */
  4930. +
  4931. +      for (p = buf; (ch = *p) != '\0' && ch != '\n' && ch != '_'; p++)
  4932. +      {
  4933. +          if (ch == ' ' && p[1] == 'U' && p[2] == ' ')
  4934. +          {
  4935. +              /* Undefined symbol... find start and end */
  4936. +              p += 3;
  4937. +              for (end = p; (ch2 = *end) != '\0' && !ISSPACE (ch2) && ch2 != '|'; end++);
  4938. +              *end = 0;
  4939. +                  
  4940. +              add_undef_list(p);
  4941. +              if (debug)
  4942. +                  fprintf (stderr, "Undefined reference to `%s'\n", p);
  4943. +          }
  4944. +      }
  4945. +
  4946. +      if (ch != '_')
  4947. +    continue;
  4948. +  
  4949. +      name = p;
  4950. +      /* Find the end of the symbol name.
  4951. +     Do not include `|', because Encore nm can tack that on the end.  */
  4952. +      for (end = p; (ch2 = *end) != '\0' && !ISSPACE (ch2) && ch2 != '|';
  4953. +       end++)
  4954. +    continue;
  4955. +
  4956. +
  4957. +      *end = '\0';
  4958. +
  4959. +      switch (is_ctor_dtor (name))
  4960. +    {
  4961. +    case 1:
  4962. +      if (which_pass != PASS_LIB)
  4963. +        add_to_list (&constructors, name);
  4964. +      break;
  4965. +
  4966. +    case 2:
  4967. +      if (which_pass != PASS_LIB)
  4968. +        add_to_list (&destructors, name);
  4969. +      break;
  4970. +
  4971. +    case 3:
  4972. +      if (which_pass != PASS_LIB)
  4973. +        fatal ("init function found in object %s", prog_name);
  4974. +#ifndef LD_INIT_SWITCH
  4975. +      add_to_list (&constructors, name);
  4976. +#endif
  4977. +      break;
  4978. +
  4979. +    case 4:
  4980. +      if (which_pass != PASS_LIB)
  4981. +        fatal ("fini function found in object %s", prog_name);
  4982. +#ifndef LD_FINI_SWITCH
  4983. +      add_to_list (&destructors, name);
  4984. +#endif
  4985. +      break;
  4986. +
  4987. +    case 5:
  4988. +      if (which_pass != PASS_LIB)
  4989. +        add_to_list (&frame_tables, name);
  4990. +      break;
  4991. +
  4992. +    default:        /* not a constructor or destructor */
  4993. +      continue;
  4994. +    }
  4995. +
  4996. +      if (debug)
  4997. +    fprintf (stderr, "\t%s\n", buf);
  4998. +    }
  4999. +
  5000. +  if (debug)
  5001. +    fprintf (stderr, "\n");
  5002. +
  5003. +  if (fclose (inf) != 0)
  5004. +    fatal_perror ("fclose");
  5005. +
  5006. +  do_wait (nm_file_name);
  5007. +
  5008. +  signal (SIGINT,  int_handler);
  5009. +#ifdef SIGQUIT
  5010. +  signal (SIGQUIT, quit_handler);
  5011. +#endif
  5012. +}
  5013. +
  5014. +#else /* __amigaos4__ */
  5015. +
  5016. +/* This is the native version */
  5017. +
  5018. +static void
  5019. +scan_prog_file (prog_name, which_pass)
  5020. +     char *prog_name;
  5021. +     enum pass which_pass;
  5022. +{
  5023. +  void (*int_handler) ();
  5024. +  void (*quit_handler) ();
  5025. +  char *nm_argv[4];
  5026. +  int pid;
  5027. +  int argc = 0;
  5028. +  int pipe_fd[2];
  5029. +  char *p, buf[1024];
  5030. +  FILE *inf;
  5031. +  char *scmd,*s;
  5032. +  int i, j,len,arglen,c,need_quote;
  5033. +
  5034. +  if (which_pass == PASS_SECOND)
  5035. +    return;
  5036. +
  5037. +  /* If we do not have an `nm', complain.  */
  5038. +  if (nm_file_name == 0)
  5039. +    fatal ("cannot find `nm'");
  5040. +
  5041. +  nm_argv[argc++] = nm_file_name;
  5042. +  if (NM_FLAGS[0] != '\0')
  5043. +    nm_argv[argc++] = NM_FLAGS;
  5044. +
  5045. +  nm_argv[argc++] = prog_name;
  5046. +  nm_argv[argc++] = (char *) 0;
  5047. +
  5048. +
  5049. +  len = 0;
  5050. +
  5051. +  for(i = 0 ; nm_argv[i] != NULL ; i++)
  5052. +  {
  5053. +    arglen = strlen(nm_argv[i]);
  5054. +
  5055. +    len += 1 + arglen;
  5056. +
  5057. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  5058. +    {
  5059. +      c = nm_argv[i][j];
  5060. +
  5061. +      if(c == ' ')
  5062. +        need_quote = 1;
  5063. +      else if (c == '\"')
  5064. +        len++;
  5065. +    }
  5066. +
  5067. +    if(need_quote)
  5068. +      len += 2;
  5069. +  }
  5070. +
  5071. +  s = scmd = (char *) xmalloc (len+1);
  5072. +
  5073. +  for(i = 0 ; nm_argv[i] != NULL ; i++)
  5074. +  {
  5075. +    arglen = strlen(nm_argv[i]);
  5076. +
  5077. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  5078. +    {
  5079. +      if(nm_argv[i][j] == ' ')
  5080. +        need_quote = 1;
  5081. +    }
  5082. +
  5083. +    if(s != scmd)
  5084. +      (*s++) = ' ';
  5085. +
  5086. +    if(need_quote)
  5087. +      (*s++) = '\"';
  5088. +
  5089. +    for(j = 0 ; j < arglen ; j++)
  5090. +    {
  5091. +      c = nm_argv[i][j];
  5092. +      if(c == '\"')
  5093. +        (*s++) = '*';
  5094. +
  5095. +      (*s++) = c;
  5096. +    }
  5097. +
  5098. +    if(need_quote)
  5099. +      (*s++) = '\"';
  5100. +  }
  5101. +
  5102. +  (*s) = '\0';
  5103. +
  5104. +  /* Trace if needed.  */
  5105. +  if (vflag)
  5106. +    {
  5107. +      char **p_argv;
  5108. +      char *str;
  5109. +
  5110. +      for (p_argv = &nm_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
  5111. +    fprintf (stderr, " %s", str);
  5112. +
  5113. +      fprintf (stderr, "\n");
  5114. +    }
  5115. +
  5116. +  fflush (stdout);
  5117. +  fflush (stderr);
  5118. +
  5119. +  inf = popen(scmd,"r");
  5120. +  if (inf == (FILE *) NULL)
  5121. +    fatal_perror ("popen");
  5122. +
  5123. +  free(scmd);
  5124. +
  5125. +  if (debug)
  5126. +    fprintf (stderr, "\nnm output with constructors/destructors.\n");
  5127. +
  5128. +  /* Read each line of nm output.  */
  5129. +  while (fgets (buf, sizeof buf, inf) != (char *) 0)
  5130. +    {
  5131. +      int ch, ch2;
  5132. +      char *name, *end;
  5133. +      
  5134. +      /* If it contains a constructor or destructor name, add the name
  5135. +     to the appropriate list.  */
  5136. +
  5137. +      for (p = buf; (ch = *p) != '\0' && ch != '\n' && ch != '_'; p++)
  5138. +      {
  5139. +          if (ch == ' ' && p[1] == 'U' && p[2] == ' ')
  5140. +          {
  5141. +              /* Undefined symbol... find start and end */
  5142. +              p += 3;
  5143. +              for (end = p; (ch2 = *end) != '\0' && !ISSPACE (ch2) && ch2 != '|'; end++);
  5144. +              *end = 0;
  5145. +                  
  5146. +              add_undef_list(p);
  5147. +              if (debug)
  5148. +                  fprintf (stderr, "Undefined reference to `%s'\n", p);
  5149. +          }
  5150. +      }
  5151. +
  5152. +      if (ch != '_')
  5153. +    continue;
  5154. +  
  5155. +      name = p;
  5156. +      /* Find the end of the symbol name.
  5157. +     Do not include `|', because Encore nm can tack that on the end.  */
  5158. +      for (end = p; (ch2 = *end) != '\0' && !ISSPACE (ch2) && ch2 != '|';
  5159. +       end++)
  5160. +    continue;
  5161. +
  5162. +
  5163. +      *end = '\0';
  5164. +
  5165. +      switch (is_ctor_dtor (name))
  5166. +    {
  5167. +    case 1:
  5168. +      if (which_pass != PASS_LIB)
  5169. +        add_to_list (&constructors, name);
  5170. +      break;
  5171. +
  5172. +    case 2:
  5173. +      if (which_pass != PASS_LIB)
  5174. +        add_to_list (&destructors, name);
  5175. +      break;
  5176. +
  5177. +    case 3:
  5178. +      if (which_pass != PASS_LIB)
  5179. +        fatal ("init function found in object %s", prog_name);
  5180. +#ifndef LD_INIT_SWITCH
  5181. +      add_to_list (&constructors, name);
  5182. +#endif
  5183. +      break;
  5184. +
  5185. +    case 4:
  5186. +      if (which_pass != PASS_LIB)
  5187. +        fatal ("fini function found in object %s", prog_name);
  5188. +#ifndef LD_FINI_SWITCH
  5189. +      add_to_list (&destructors, name);
  5190. +#endif
  5191. +      break;
  5192. +
  5193. +    case 5:
  5194. +      if (which_pass != PASS_LIB)
  5195. +        add_to_list (&frame_tables, name);
  5196. +      break;
  5197. +
  5198. +    default:        /* not a constructor or destructor */
  5199. +      continue;
  5200. +    }
  5201. +
  5202. +      if (debug)
  5203. +    fprintf (stderr, "\t%s\n", buf);
  5204. +    }
  5205. +
  5206. +  if (debug)
  5207. +    fprintf (stderr, "\n");
  5208. +
  5209. +  if (fclose (inf) != 0)
  5210. +    fatal_perror ("fclose");
  5211. +
  5212. +  do_wait (nm_file_name);
  5213. +
  5214. +  signal (SIGINT,  int_handler);
  5215. +#ifdef SIGQUIT
  5216. +  signal (SIGQUIT, quit_handler);
  5217. +#endif
  5218. +}
  5219. +
  5220. +#endif
  5221. +#if SUNOS4_SHARED_LIBRARIES
  5222. +
  5223. +/* Routines to scan the SunOS 4 _DYNAMIC structure to find shared libraries
  5224. +   that the output file depends upon and their initialization/finalization
  5225. +   routines, if any.  */
  5226. +
  5227. +#include <a.out.h>
  5228. +#include <fcntl.h>
  5229. +#include <link.h>
  5230. +#include <sys/mman.h>
  5231. +#include <sys/param.h>
  5232. +#include <unistd.h>
  5233. +#include <sys/dir.h>
  5234. +
  5235. +/* pointers to the object file */
  5236. +unsigned object;        /* address of memory mapped file */
  5237. +unsigned objsize;        /* size of memory mapped to file */
  5238. +char * code;        /* pointer to code segment */
  5239. +char * data;        /* pointer to data segment */
  5240. +struct nlist *symtab;    /* pointer to symbol table */
  5241. +struct link_dynamic *ld;
  5242. +struct link_dynamic_2 *ld_2;
  5243. +struct head libraries;
  5244. +
  5245. +/* Map the file indicated by NAME into memory and store its address.  */
  5246. +
  5247. +static void
  5248. +mapfile (name)
  5249. +     char *name;
  5250. +{
  5251. +  int fp;
  5252. +  struct stat s;
  5253. +  if ((fp = open (name, O_RDONLY)) == -1)
  5254. +    fatal ("unable to open file '%s'", name);
  5255. +  if (fstat (fp, &s) == -1)
  5256. +    fatal ("unable to stat file '%s'", name);
  5257. +
  5258. +  objsize = s.st_size;
  5259. +  object = (unsigned) mmap (0, objsize, PROT_READ|PROT_WRITE, MAP_PRIVATE,
  5260. +                fp, 0);
  5261. +  if (object == -1)
  5262. +    fatal ("unable to mmap file '%s'", name);
  5263. +
  5264. +  close (fp);
  5265. +}
  5266. +
  5267. +/* Helpers for locatelib.  */
  5268. +
  5269. +static char *libname;
  5270. +
  5271. +static int
  5272. +libselect (d)
  5273. +     struct direct *d;
  5274. +{
  5275. +  return (strncmp (libname, d->d_name, strlen (libname)) == 0);
  5276. +}
  5277. +
  5278. +/* If one file has an additional numeric extension past LIBNAME, then put
  5279. +   that one first in the sort.  If both files have additional numeric
  5280. +   extensions, then put the one with the higher number first in the sort.
  5281. +
  5282. +   We must verify that the extension is numeric, because Sun saves the
  5283. +   original versions of patched libraries with a .FCS extension.  Files with
  5284. +   invalid extensions must go last in the sort, so that they will not be used.  */
  5285. +
  5286. +static int
  5287. +libcompare (d1, d2)
  5288. +     struct direct **d1, **d2;
  5289. +{
  5290. +  int i1, i2 = strlen (libname);
  5291. +  char *e1 = (*d1)->d_name + i2;
  5292. +  char *e2 = (*d2)->d_name + i2;
  5293. +
  5294. +  while (*e1 && *e2 && *e1 == '.' && *e2 == '.'
  5295. +     && e1[1] && ISDIGIT (e1[1]) && e2[1] && ISDIGIT (e2[1]))
  5296. +    {
  5297. +      ++e1;
  5298. +      ++e2;
  5299. +      i1 = strtol (e1, &e1, 10);
  5300. +      i2 = strtol (e2, &e2, 10);
  5301. +      if (i1 != i2)
  5302. +    return i1 - i2;
  5303. +    }
  5304. +
  5305. +  if (*e1)
  5306. +    {
  5307. +      /* It has a valid numeric extension, prefer this one.  */
  5308. +      if (*e1 == '.' && e1[1] && ISDIGIT (e1[1]))
  5309. +    return 1;
  5310. +      /* It has a invalid numeric extension, must prefer the other one.  */
  5311. +      else
  5312. +    return -1;
  5313. +    }
  5314. +  else if (*e2)
  5315. +    {
  5316. +      /* It has a valid numeric extension, prefer this one.  */
  5317. +      if (*e2 == '.' && e2[1] && ISDIGIT (e2[1]))
  5318. +    return -1;
  5319. +      /* It has a invalid numeric extension, must prefer the other one.  */
  5320. +      else
  5321. +    return 1;
  5322. +    }
  5323. +  else
  5324. +    return 0;
  5325. +}
  5326. +
  5327. +/* Given the name NAME of a dynamic dependency, find its pathname and add
  5328. +   it to the list of libraries.  */
  5329. +
  5330. +static void
  5331. +locatelib (name)
  5332. +     char *name;
  5333. +{
  5334. +  static char **l;
  5335. +  static int cnt;
  5336. +  char buf[MAXPATHLEN];
  5337. +  char *p, *q;
  5338. +  char **pp;
  5339. +
  5340. +  if (l == 0)
  5341. +    {
  5342. +      char *ld_rules;
  5343. +      char *ldr = 0;
  5344. +      /* counting elements in array, need 1 extra for null */
  5345. +      cnt = 1;  
  5346. +      ld_rules = (char *) (ld_2->ld_rules + code);
  5347. +      if (ld_rules)
  5348. +    {
  5349. +      cnt++;
  5350. +      for (; *ld_rules != 0; ld_rules++)
  5351. +        if (*ld_rules == ':')
  5352. +          cnt++;
  5353. +      ld_rules = (char *) (ld_2->ld_rules + code);
  5354. +      ldr = (char *) malloc (strlen (ld_rules) + 1);
  5355. +      strcpy (ldr, ld_rules);
  5356. +    }
  5357. +      p = getenv ("LD_LIBRARY_PATH");
  5358. +      q = 0;
  5359. +      if (p)
  5360. +    {
  5361. +      cnt++;
  5362. +      for (q = p ; *q != 0; q++)
  5363. +        if (*q == ':')
  5364. +          cnt++;
  5365. +      q = (char *) malloc (strlen (p) + 1);
  5366. +      strcpy (q, p);
  5367. +    }
  5368. +      l = (char **) malloc ((cnt + 3) * sizeof (char *));
  5369. +      pp = l;
  5370. +      if (ldr)
  5371. +    {
  5372. +      *pp++ = ldr;
  5373. +      for (; *ldr != 0; ldr++) 
  5374. +        if (*ldr == ':')
  5375. +          {
  5376. +        *ldr++ = 0;
  5377. +        *pp++ = ldr;
  5378. +          }
  5379. +    }
  5380. +      if (q)
  5381. +    {
  5382. +      *pp++ = q;
  5383. +      for (; *q != 0; q++) 
  5384. +        if (*q == ':')
  5385. +          {
  5386. +        *q++ = 0;
  5387. +        *pp++ = q;
  5388. +          }
  5389. +    }
  5390. +      /* built in directories are /lib, /usr/lib, and /usr/local/lib */
  5391. +      *pp++ = "/lib";
  5392. +      *pp++ = "/usr/lib";
  5393. +      *pp++ = "/usr/local/lib";
  5394. +      *pp = 0;
  5395. +    }
  5396. +  libname = name;
  5397. +  for (pp = l; *pp != 0 ; pp++)
  5398. +    {
  5399. +      struct direct **namelist;
  5400. +      int entries;
  5401. +      if ((entries = scandir (*pp, &namelist, libselect, libcompare)) > 0)
  5402. +    {
  5403. +      sprintf (buf, "%s/%s", *pp, namelist[entries - 1]->d_name);
  5404. +      add_to_list (&libraries, buf);
  5405. +      if (debug)
  5406. +        fprintf (stderr, "%s\n", buf);
  5407. +      break;
  5408. +    }
  5409. +    }
  5410. +  if (*pp == 0)
  5411. +    {
  5412. +      if (debug)
  5413. +    notice ("not found\n");
  5414. +      else
  5415. +    fatal ("dynamic dependency %s not found", name);
  5416. +    }
  5417. +}
  5418. +
  5419. +/* Scan the _DYNAMIC structure of the output file to find shared libraries
  5420. +   that it depends upon and any constructors or destructors they contain.  */
  5421. +
  5422. +static void 
  5423. +scan_libraries (prog_name)
  5424. +     char *prog_name;
  5425. +{
  5426. +  struct exec *header;
  5427. +  char *base;
  5428. +  struct link_object *lo;
  5429. +  char buff[MAXPATHLEN];
  5430. +  struct id *list;
  5431. +
  5432. +  mapfile (prog_name);
  5433. +  header = (struct exec *)object;
  5434. +  if (N_BADMAG (*header))
  5435. +    fatal ("bad magic number in file '%s'", prog_name);
  5436. +  if (header->a_dynamic == 0)
  5437. +    return;
  5438. +
  5439. +  code = (char *) (N_TXTOFF (*header) + (long) header);
  5440. +  data = (char *) (N_DATOFF (*header) + (long) header);
  5441. +  symtab = (struct nlist *) (N_SYMOFF (*header) + (long) header);
  5442. +
  5443. +  if (header->a_magic == ZMAGIC && header->a_entry == 0x20)
  5444. +    {
  5445. +      /* shared object */
  5446. +      ld = (struct link_dynamic *) (symtab->n_value + code);
  5447. +      base = code;
  5448. +    }
  5449. +  else
  5450. +    {
  5451. +      /* executable */
  5452. +      ld = (struct link_dynamic *) data;
  5453. +      base = code-PAGSIZ;
  5454. +    }
  5455. +
  5456. +  if (debug)
  5457. +    notice ("dynamic dependencies.\n");
  5458. +
  5459. +  ld_2 = (struct link_dynamic_2 *) ((long) ld->ld_un.ld_2 + (long)base);
  5460. +  for (lo = (struct link_object *) ld_2->ld_need; lo;
  5461. +       lo = (struct link_object *) lo->lo_next)
  5462. +    {
  5463. +      char *name;
  5464. +      lo = (struct link_object *) ((long) lo + code);
  5465. +      name = (char *) (code + lo->lo_name);
  5466. +      if (lo->lo_library)
  5467. +    {
  5468. +      if (debug)
  5469. +        fprintf (stderr, "\t-l%s.%d => ", name, lo->lo_major);
  5470. +      sprintf (buff, "lib%s.so.%d.%d", name, lo->lo_major, lo->lo_minor);
  5471. +      locatelib (buff);
  5472. +    }
  5473. +      else
  5474. +    {
  5475. +      if (debug)
  5476. +        fprintf (stderr, "\t%s\n", name);
  5477. +      add_to_list (&libraries, name);
  5478. +    }
  5479. +    }
  5480. +
  5481. +  if (debug)
  5482. +    fprintf (stderr, "\n");
  5483. +
  5484. +  /* now iterate through the library list adding their symbols to
  5485. +     the list.  */
  5486. +  for (list = libraries.first; list; list = list->next)
  5487. +    scan_prog_file (list->name, PASS_LIB);
  5488. +}
  5489. +
  5490. +#else  /* SUNOS4_SHARED_LIBRARIES */
  5491. +#ifdef LDD_SUFFIX
  5492. +
  5493. +/* Use the List Dynamic Dependencies program to find shared libraries that
  5494. +   the output file depends upon and their initialization/finalization
  5495. +   routines, if any.  */
  5496. +
  5497. +static void 
  5498. +scan_libraries (prog_name)
  5499. +     char *prog_name;
  5500. +{
  5501. +  static struct head libraries;        /* list of shared libraries found */
  5502. +  struct id *list;
  5503. +  void (*int_handler) ();
  5504. +  void (*quit_handler) ();
  5505. +  char *ldd_argv[4];
  5506. +  int pid;
  5507. +  int argc = 0;
  5508. +  int pipe_fd[2];
  5509. +  char buf[1024];
  5510. +  FILE *inf;
  5511. +
  5512. +  /* If we do not have an `ldd', complain.  */
  5513. +  if (ldd_file_name == 0)
  5514. +    {
  5515. +      error ("cannot find `ldd'");
  5516. +      return;
  5517. +    }
  5518. +
  5519. +  ldd_argv[argc++] = ldd_file_name;
  5520. +  ldd_argv[argc++] = prog_name;
  5521. +  ldd_argv[argc++] = (char *) 0;
  5522. +
  5523. +  if (pipe (pipe_fd) < 0)
  5524. +    fatal_perror ("pipe");
  5525. +
  5526. +  inf = fdopen (pipe_fd[0], "r");
  5527. +  if (inf == (FILE *) 0)
  5528. +    fatal_perror ("fdopen");
  5529. +
  5530. +  /* Trace if needed.  */
  5531. +  if (vflag)
  5532. +    {
  5533. +      char **p_argv;
  5534. +      char *str;
  5535. +
  5536. +      for (p_argv = &ldd_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
  5537. +    fprintf (stderr, " %s", str);
  5538. +
  5539. +      fprintf (stderr, "\n");
  5540. +    }
  5541. +
  5542. +  fflush (stdout);
  5543. +  fflush (stderr);
  5544. +
  5545. +  /* Spawn child ldd on pipe */
  5546. +  pid = vfork ();
  5547. +  if (pid == -1)
  5548. +    fatal_perror (VFORK_STRING);
  5549. +
  5550. +  if (pid == 0)            /* child context */
  5551. +    {
  5552. +      /* setup stdout */
  5553. +      if (dup2 (pipe_fd[1], 1) < 0)
  5554. +    fatal_perror ("dup2 %d 1", pipe_fd[1]);
  5555. +
  5556. +      if (close (pipe_fd[0]) < 0)
  5557. +    fatal_perror ("close %d", pipe_fd[0]);
  5558. +
  5559. +      if (close (pipe_fd[1]) < 0)
  5560. +    fatal_perror ("close %d", pipe_fd[1]);
  5561. +
  5562. +      execv (ldd_file_name, ldd_argv);
  5563. +      fatal_perror ("execv %s", ldd_file_name);
  5564. +    }
  5565. +
  5566. +  /* Parent context from here on.  */
  5567. +  int_handler  = (void (*) ()) signal (SIGINT,  SIG_IGN);
  5568. +#ifdef SIGQUIT
  5569. +  quit_handler = (void (*) ()) signal (SIGQUIT, SIG_IGN);
  5570. +#endif
  5571. +
  5572. +  if (close (pipe_fd[1]) < 0)
  5573. +    fatal_perror ("close %d", pipe_fd[1]);
  5574. +
  5575. +  if (debug)
  5576. +    notice ("\nldd output with constructors/destructors.\n");
  5577. +
  5578. +  /* Read each line of ldd output.  */
  5579. +  while (fgets (buf, sizeof buf, inf) != (char *) 0)
  5580. +    {
  5581. +      int ch, ch2;
  5582. +      char *name, *end, *p = buf;
  5583. +
  5584. +      /* Extract names of libraries and add to list.  */
  5585. +      PARSE_LDD_OUTPUT (p);
  5586. +      if (p == 0)
  5587. +    continue;
  5588. +
  5589. +      name = p;
  5590. +      if (strncmp (name, "not found", sizeof ("not found") - 1) == 0)
  5591. +    fatal ("dynamic dependency %s not found", buf);
  5592. +
  5593. +      /* Find the end of the symbol name.  */
  5594. +      for (end = p; 
  5595. +       (ch2 = *end) != '\0' && ch2 != '\n' && !ISSPACE (ch2) && ch2 != '|';
  5596. +       end++)
  5597. +    continue;
  5598. +      *end = '\0';
  5599. +
  5600. +      if (access (name, R_OK) == 0)
  5601. +        add_to_list (&libraries, name);
  5602. +      else
  5603. +    fatal ("unable to open dynamic dependency '%s'", buf);
  5604. +
  5605. +      if (debug)
  5606. +    fprintf (stderr, "\t%s\n", buf);
  5607. +    }
  5608. +  if (debug)
  5609. +    fprintf (stderr, "\n");
  5610. +
  5611. +  if (fclose (inf) != 0)
  5612. +    fatal_perror ("fclose");
  5613. +
  5614. +  do_wait (ldd_file_name);
  5615. +
  5616. +  signal (SIGINT,  int_handler);
  5617. +#ifdef SIGQUIT
  5618. +  signal (SIGQUIT, quit_handler);
  5619. +#endif
  5620. +
  5621. +  /* now iterate through the library list adding their symbols to
  5622. +     the list.  */
  5623. +  for (list = libraries.first; list; list = list->next)
  5624. +    scan_prog_file (list->name, PASS_LIB);
  5625. +}
  5626. +
  5627. +#endif /* LDD_SUFFIX */
  5628. +#endif /* SUNOS4_SHARED_LIBRARIES */
  5629. +
  5630. +#endif /* OBJECT_FORMAT_NONE */
  5631. +
  5632. +
  5633. +/*
  5634. + * COFF specific stuff.
  5635. + */
  5636. +
  5637. +#ifdef OBJECT_FORMAT_COFF
  5638. +
  5639. +#if defined(EXTENDED_COFF)
  5640. +#   define GCC_SYMBOLS(X)    (SYMHEADER(X).isymMax + SYMHEADER(X).iextMax)
  5641. +#   define GCC_SYMENT        SYMR
  5642. +#   define GCC_OK_SYMBOL(X)    ((X).st == stProc || (X).st == stGlobal)
  5643. +#   define GCC_SYMINC(X)    (1)
  5644. +#   define GCC_SYMZERO(X)    (SYMHEADER(X).isymMax)
  5645. +#   define GCC_CHECK_HDR(X)    (PSYMTAB(X) != 0)
  5646. +#else
  5647. +#   define GCC_SYMBOLS(X)    (HEADER(ldptr).f_nsyms)
  5648. +#   define GCC_SYMENT        SYMENT
  5649. +#   define GCC_OK_SYMBOL(X) \
  5650. +     (((X).n_sclass == C_EXT) && \
  5651. +      ((X).n_scnum > N_UNDEF) && \
  5652. +      (((X).n_type & N_TMASK) == (DT_NON << N_BTSHFT) || \
  5653. +       ((X).n_type & N_TMASK) == (DT_FCN << N_BTSHFT)))
  5654. +#   define GCC_UNDEF_SYMBOL(X) \
  5655. +     (((X).n_sclass == C_EXT) && ((X).n_scnum == N_UNDEF))
  5656. +#   define GCC_SYMINC(X)    ((X).n_numaux+1)
  5657. +#   define GCC_SYMZERO(X)    0
  5658. +#   define GCC_CHECK_HDR(X) \
  5659. +     ((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
  5660. +      || (HEADER (X).f_magic == 0757 && aix64_flag))
  5661. +#endif
  5662. +
  5663. +extern char *ldgetname ();
  5664. +
  5665. +/* COFF version to scan the name list of the loaded program for
  5666. +   the symbols g++ uses for static constructors and destructors.
  5667. +
  5668. +   The constructor table begins at __CTOR_LIST__ and contains a count
  5669. +   of the number of pointers (or -1 if the constructors are built in a
  5670. +   separate section by the linker), followed by the pointers to the
  5671. +   constructor functions, terminated with a null pointer.  The
  5672. +   destructor table has the same format, and begins at __DTOR_LIST__.  */
  5673. +
  5674. +static void
  5675. +scan_prog_file (prog_name, which_pass)
  5676. +     char *prog_name;
  5677. +     enum pass which_pass;
  5678. +{
  5679. +  LDFILE *ldptr = NULL;
  5680. +  int sym_index, sym_count;
  5681. +  int is_shared = 0;
  5682. +#ifdef COLLECT_EXPORT_LIST
  5683. +  /* Should we generate an import list for given prog_name?  */
  5684. +  int import_flag = (which_pass == PASS_OBJ ? 0 : use_import_list (prog_name));
  5685. +#endif
  5686. +
  5687. +  if (which_pass != PASS_FIRST && which_pass != PASS_OBJ)
  5688. +    return;
  5689. +
  5690. +#ifdef COLLECT_EXPORT_LIST
  5691. +  /* We do not need scanning for some standard C libraries.  */
  5692. +  if (which_pass == PASS_FIRST && ignore_library (prog_name))
  5693. +    return;
  5694. +
  5695. +  /* On AIX we have a loop, because there is not much difference
  5696. +     between an object and an archive. This trick allows us to
  5697. +     eliminate scan_libraries() function.  */
  5698. +  do
  5699. +    {
  5700. +#endif
  5701. +      if ((ldptr = ldopen (prog_name, ldptr)) != NULL)
  5702. +    {
  5703. +      if (! MY_ISCOFF (HEADER (ldptr).f_magic))
  5704. +        fatal ("%s: not a COFF file", prog_name);
  5705. +
  5706. +      if (GCC_CHECK_HDR (ldptr))
  5707. +        {
  5708. +          sym_count = GCC_SYMBOLS (ldptr);
  5709. +          sym_index = GCC_SYMZERO (ldptr);
  5710. +
  5711. +#ifdef COLLECT_EXPORT_LIST
  5712. +          /* Is current archive member a shared object?  */
  5713. +          is_shared = HEADER (ldptr).f_flags & F_SHROBJ;
  5714. +#endif
  5715. +
  5716. +          while (sym_index < sym_count)
  5717. +        {
  5718. +          GCC_SYMENT symbol;
  5719. +
  5720. +          if (ldtbread (ldptr, sym_index, &symbol) <= 0)
  5721. +            break;
  5722. +          sym_index += GCC_SYMINC (symbol);
  5723. +
  5724. +          if (GCC_OK_SYMBOL (symbol))
  5725. +            {
  5726. +              char *name;
  5727. +
  5728. +              if ((name = ldgetname (ldptr, &symbol)) == NULL)
  5729. +            continue;        /* should never happen */
  5730. +
  5731. +#ifdef XCOFF_DEBUGGING_INFO
  5732. +              /* All AIX function names have a duplicate entry
  5733. +             beginning with a dot.  */
  5734. +              if (*name == '.')
  5735. +            ++name;
  5736. +#endif
  5737. +
  5738. +              switch (is_ctor_dtor (name))
  5739. +            {
  5740. +            case 1:
  5741. +              if (! is_shared) add_to_list (&constructors, name);
  5742. +#ifdef COLLECT_EXPORT_LIST
  5743. +              if (which_pass == PASS_OBJ)
  5744. +                add_to_list (&exports, name);
  5745. +              /* If this symbol was undefined and we are building
  5746. +                 an import list, we should add a symbol to this
  5747. +                 list.  */
  5748. +              else
  5749. +                if (import_flag
  5750. +                && is_in_list (name, undefined.first))
  5751. +                  add_to_list (&imports, name);
  5752. +#endif
  5753. +              break;
  5754. +
  5755. +            case 2:
  5756. +              if (! is_shared) add_to_list (&destructors, name);
  5757. +#ifdef COLLECT_EXPORT_LIST
  5758. +              if (which_pass == PASS_OBJ)
  5759. +                add_to_list (&exports, name);
  5760. +              /* If this symbol was undefined and we are building
  5761. +                 an import list, we should add a symbol to this
  5762. +                 list.  */
  5763. +              else
  5764. +                if (import_flag
  5765. +                && is_in_list (name, undefined.first))
  5766. +                  add_to_list (&imports, name);
  5767. +#endif
  5768. +              break;
  5769. +
  5770. +#ifdef COLLECT_EXPORT_LIST
  5771. +            case 3:
  5772. +              if (is_shared)
  5773. +                add_to_list (&constructors, name);
  5774. +              break;
  5775. +
  5776. +            case 4:
  5777. +              if (is_shared)
  5778. +                add_to_list (&destructors, name);
  5779. +              break;
  5780. +#endif
  5781. +
  5782. +            case 5:
  5783. +              if (! is_shared)
  5784. +                add_to_list (&frame_tables, name);
  5785. +              break;
  5786. +
  5787. +            default:    /* not a constructor or destructor */
  5788. +#ifdef COLLECT_EXPORT_LIST
  5789. +              /* If we are building a shared object on AIX we need
  5790. +                 to explicitly export all global symbols or add
  5791. +                 them to import list.  */
  5792. +              if (shared_obj) 
  5793. +                {
  5794. +                  if (which_pass == PASS_OBJ && (! export_flag))
  5795. +                add_to_list (&exports, name);
  5796. +                  else if (! is_shared && which_pass == PASS_FIRST
  5797. +                       && import_flag
  5798. +                       && is_in_list(name, undefined.first))
  5799. +                add_to_list (&imports, name);
  5800. +                }
  5801. +#endif
  5802. +              continue;
  5803. +            }
  5804. +
  5805. +#if !defined(EXTENDED_COFF)
  5806. +              if (debug)
  5807. +            fprintf (stderr, "\tsec=%d class=%d type=%s%o %s\n",
  5808. +                 symbol.n_scnum, symbol.n_sclass,
  5809. +                 (symbol.n_type ? "0" : ""), symbol.n_type,
  5810. +                 name);
  5811. +#else
  5812. +              if (debug)
  5813. +            fprintf (stderr,
  5814. +                 "\tiss = %5d, value = %5ld, index = %5d, name = %s\n",
  5815. +                 symbol.iss, (long) symbol.value, symbol.index, name);
  5816. +#endif
  5817. +            }
  5818. +#ifdef COLLECT_EXPORT_LIST
  5819. +          /* If we are building a shared object we should collect
  5820. +             information about undefined symbols for later
  5821. +             import list generation.  */
  5822. +          else if (shared_obj && GCC_UNDEF_SYMBOL (symbol))
  5823. +            {
  5824. +              char *name;
  5825. +
  5826. +              if ((name = ldgetname (ldptr, &symbol)) == NULL)
  5827. +            continue;        /* should never happen */
  5828. +
  5829. +              /* All AIX function names have a duplicate entry
  5830. +             beginning with a dot.  */
  5831. +              if (*name == '.')
  5832. +            ++name;
  5833. +              add_to_list (&undefined, name);
  5834. +            }
  5835. +#endif
  5836. +        }
  5837. +        }
  5838. +#ifdef COLLECT_EXPORT_LIST
  5839. +      else
  5840. +        {
  5841. +          /* If archive contains both 32-bit and 64-bit objects,
  5842. +         we want to skip objects in other mode so mismatch normal.  */
  5843. +          if (debug)
  5844. +        fprintf (stderr, "%s : magic=%o aix64=%d mismatch\n",
  5845. +             prog_name, HEADER (ldptr).f_magic, aix64_flag);
  5846. +        }
  5847. +#endif
  5848. +    }
  5849. +      else
  5850. +    {
  5851. +      fatal ("%s: cannot open as COFF file", prog_name);
  5852. +    }
  5853. +#ifdef COLLECT_EXPORT_LIST
  5854. +      /* On AIX loop continues while there are more members in archive.  */
  5855. +    }
  5856. +  while (ldclose (ldptr) == FAILURE);
  5857. +#else
  5858. +  /* Otherwise we simply close ldptr.  */
  5859. +  (void) ldclose(ldptr);
  5860. +#endif
  5861. +}
  5862. +
  5863. +
  5864. +#ifdef COLLECT_EXPORT_LIST
  5865. +
  5866. +/* Never generate import list (gcc-2.95 branch).  */
  5867. +static int
  5868. +use_import_list (prog_name)
  5869. +     char *prog_name;
  5870. +{
  5871. +  return 0;
  5872. +}
  5873. +
  5874. +/* Given a library name without "lib" prefix, this function
  5875. +   returns a full library name including a path.  */
  5876. +static char *
  5877. +resolve_lib_name (name)
  5878. +     char *name;
  5879. +{
  5880. +  char *lib_buf;
  5881. +  int i, j, l = 0;
  5882. +
  5883. +  for (i = 0; libpaths[i]; i++)
  5884. +    if (libpaths[i]->max_len > l)
  5885. +      l = libpaths[i]->max_len;
  5886. +
  5887. +  lib_buf = xmalloc (l + strlen(name) + 10);
  5888. +
  5889. +  for (i = 0; libpaths[i]; i++)
  5890. +    {
  5891. +      struct prefix_list *list = libpaths[i]->plist;
  5892. +      for (; list; list = list->next)
  5893. +    {
  5894. +      for (j = 0; libexts[j]; j++)
  5895. +        {
  5896. +              /* The following lines are needed because path_prefix list
  5897. +                 may contain directories both with trailing '/' and
  5898. +                 without it.  */
  5899. +              char *p = "";
  5900. +              if (list->prefix[strlen(list->prefix)-1] != '/')
  5901. +                p = "/";
  5902. +                 sprintf (lib_buf, "%s%slib%s.%s",
  5903. +               list->prefix, p, name, libexts[j]);
  5904. +if (debug) fprintf (stderr, "searching for: %s\n", lib_buf);
  5905. +          if (file_exists (lib_buf))
  5906. +        {
  5907. +if (debug) fprintf (stderr, "found: %s\n", lib_buf);
  5908. +          return (lib_buf);
  5909. +        }
  5910. +        }
  5911. +    }
  5912. +    }
  5913. +  if (debug)
  5914. +    fprintf (stderr, "not found\n");
  5915. +  else
  5916. +    fatal ("Library lib%s not found", name);
  5917. +  return (NULL);
  5918. +}
  5919. +
  5920. +/* Array of standard AIX libraries which should not
  5921. +   be scanned for ctors/dtors.  */
  5922. +static char* aix_std_libs[] = {
  5923. +  "/unix",
  5924. +  "/lib/libc.a",
  5925. +  "/lib/libc_r.a",
  5926. +  "/usr/lib/libc.a",
  5927. +  "/usr/lib/libc_r.a",
  5928. +  "/usr/lib/threads/libc.a",
  5929. +  "/usr/ccs/lib/libc.a",
  5930. +  "/usr/ccs/lib/libc_r.a",
  5931. +  NULL
  5932. +};
  5933. +
  5934. +/* This function checks the filename and returns 1
  5935. +   if this name matches the location of a standard AIX library. */
  5936. +static int
  5937. +ignore_library (name)
  5938. +     char *name;
  5939. +{
  5940. +  char **p = &aix_std_libs[0];
  5941. +  while (*p++ != NULL)
  5942. +    if (! strcmp (name, *p)) return 1;
  5943. +  return 0;
  5944. +}
  5945. +
  5946. +#endif
  5947. +
  5948. +#endif /* OBJECT_FORMAT_COFF */
  5949. +
  5950. +
  5951. +/*
  5952. + * OSF/rose specific stuff.
  5953. + */
  5954. +
  5955. +#ifdef OBJECT_FORMAT_ROSE
  5956. +
  5957. +/* Union of the various load commands */
  5958. +
  5959. +typedef union load_union
  5960. +{
  5961. +  ldc_header_t            hdr;    /* common header */
  5962. +  load_cmd_map_command_t    map;    /* map indexing other load cmds */
  5963. +  interpreter_command_t        iprtr;    /* interpreter pathname */
  5964. +  strings_command_t        str;    /* load commands strings section */
  5965. +  region_command_t        region;    /* region load command */
  5966. +  reloc_command_t        reloc;    /* relocation section */
  5967. +  package_command_t        pkg;    /* package load command */
  5968. +  symbols_command_t        sym;    /* symbol sections */
  5969. +  entry_command_t        ent;    /* program start section */
  5970. +  gen_info_command_t        info;    /* object information */
  5971. +  func_table_command_t        func;    /* function constructors/destructors */
  5972. +} load_union_t;
  5973. +
  5974. +/* Structure to point to load command and data section in memory.  */
  5975. +
  5976. +typedef struct load_all
  5977. +{
  5978. +  load_union_t *load;            /* load command */
  5979. +  char *section;            /* pointer to section */
  5980. +} load_all_t;
  5981. +
  5982. +/* Structure to contain information about a file mapped into memory.  */
  5983. +
  5984. +struct file_info
  5985. +{
  5986. +  char *start;                /* start of map */
  5987. +  char *name;                /* filename */
  5988. +  long    size;                /* size of the file */
  5989. +  long  rounded_size;            /* size rounded to page boundary */
  5990. +  int    fd;                /* file descriptor */
  5991. +  int    rw;                /* != 0 if opened read/write */
  5992. +  int    use_mmap;            /* != 0 if mmap'ed */
  5993. +};
  5994. +
  5995. +extern int decode_mach_o_hdr ();
  5996. +extern int encode_mach_o_hdr ();
  5997. +
  5998. +static void add_func_table    PROTO((mo_header_t *, load_all_t *,
  5999. +                       symbol_info_t *, int));
  6000. +static void print_header    PROTO((mo_header_t *));
  6001. +static void print_load_command    PROTO((load_union_t *, size_t, int));
  6002. +static void bad_header        PROTO((int));
  6003. +static struct file_info    *read_file  PROTO((char *, int, int));
  6004. +static void end_file        PROTO((struct file_info *));
  6005. +
  6006. +/* OSF/rose specific version to scan the name list of the loaded
  6007. +   program for the symbols g++ uses for static constructors and
  6008. +   destructors.
  6009. +
  6010. +   The constructor table begins at __CTOR_LIST__ and contains a count
  6011. +   of the number of pointers (or -1 if the constructors are built in a
  6012. +   separate section by the linker), followed by the pointers to the
  6013. +   constructor functions, terminated with a null pointer.  The
  6014. +   destructor table has the same format, and begins at __DTOR_LIST__.  */
  6015. +
  6016. +static void
  6017. +scan_prog_file (prog_name, which_pass)
  6018. +     char *prog_name;
  6019. +     enum pass which_pass;
  6020. +{
  6021. +  char *obj;
  6022. +  mo_header_t hdr;
  6023. +  load_all_t *load_array;
  6024. +  load_all_t *load_end;
  6025. +  load_all_t *load_cmd;
  6026. +  int symbol_load_cmds;
  6027. +  off_t offset;
  6028. +  int i;
  6029. +  int num_syms;
  6030. +  int status;
  6031. +  char *str_sect;
  6032. +  struct file_info *obj_file;
  6033. +  int prog_fd;
  6034. +  mo_lcid_t cmd_strings      = -1;
  6035. +  symbol_info_t *main_sym = 0;
  6036. +  int rw          = (which_pass != PASS_FIRST);
  6037. +
  6038. +  prog_fd = open (prog_name, (rw) ? O_RDWR : O_RDONLY);
  6039. +  if (prog_fd < 0)
  6040. +    fatal_perror ("open %s", prog_name);
  6041. +
  6042. +  obj_file = read_file (prog_name, prog_fd, rw);
  6043. +  obj = obj_file->start;
  6044. +
  6045. +  status = decode_mach_o_hdr (obj, MO_SIZEOF_RAW_HDR, MOH_HEADER_VERSION, &hdr);
  6046. +  if (status != MO_HDR_CONV_SUCCESS)
  6047. +    bad_header (status);
  6048. +
  6049. +
  6050. +  /* Do some basic sanity checks.  Note we explicitly use the big endian magic number,
  6051. +     since the hardware will automatically swap bytes for us on loading little endian
  6052. +     integers.  */
  6053. +
  6054. +#ifndef CROSS_COMPILE
  6055. +  if (hdr.moh_magic != MOH_MAGIC_MSB
  6056. +      || hdr.moh_header_version != MOH_HEADER_VERSION
  6057. +      || hdr.moh_byte_order != OUR_BYTE_ORDER
  6058. +      || hdr.moh_data_rep_id != OUR_DATA_REP_ID
  6059. +      || hdr.moh_cpu_type != OUR_CPU_TYPE
  6060. +      || hdr.moh_cpu_subtype != OUR_CPU_SUBTYPE
  6061. +      || hdr.moh_vendor_type != OUR_VENDOR_TYPE)
  6062. +    {
  6063. +      fatal ("incompatibilities between object file & expected values");
  6064. +    }
  6065. +#endif
  6066. +
  6067. +  if (debug)
  6068. +    print_header (&hdr);
  6069. +
  6070. +  offset = hdr.moh_first_cmd_off;
  6071. +  load_end = load_array
  6072. +    = (load_all_t *) xcalloc (sizeof (load_all_t), hdr.moh_n_load_cmds + 2);
  6073. +
  6074. +  /* Build array of load commands, calculating the offsets */
  6075. +  for (i = 0; i < hdr.moh_n_load_cmds; i++)
  6076. +    {
  6077. +      load_union_t *load_hdr;        /* load command header */
  6078. +
  6079. +      load_cmd = load_end++;
  6080. +      load_hdr = (load_union_t *) (obj + offset);
  6081. +
  6082. +      /* If modifying the program file, copy the header.  */
  6083. +      if (rw)
  6084. +    {
  6085. +      load_union_t *ptr = (load_union_t *) xmalloc (load_hdr->hdr.ldci_cmd_size);
  6086. +      bcopy ((char *)load_hdr, (char *)ptr, load_hdr->hdr.ldci_cmd_size);
  6087. +      load_hdr = ptr;
  6088. +
  6089. +      /* null out old command map, because we will rewrite at the end.  */
  6090. +      if (ptr->hdr.ldci_cmd_type == LDC_CMD_MAP)
  6091. +        {
  6092. +          cmd_strings = ptr->map.lcm_ld_cmd_strings;
  6093. +          ptr->hdr.ldci_cmd_type = LDC_UNDEFINED;
  6094. +        }
  6095. +    }
  6096. +
  6097. +      load_cmd->load = load_hdr;
  6098. +      if (load_hdr->hdr.ldci_section_off > 0)
  6099. +    load_cmd->section = obj + load_hdr->hdr.ldci_section_off;
  6100. +
  6101. +      if (debug)
  6102. +    print_load_command (load_hdr, offset, i);
  6103. +
  6104. +      offset += load_hdr->hdr.ldci_cmd_size;
  6105. +    }
  6106. +
  6107. +  /* If the last command is the load command map and is not undefined,
  6108. +     decrement the count of load commands.  */
  6109. +  if (rw && load_end[-1].load->hdr.ldci_cmd_type == LDC_UNDEFINED)
  6110. +    {
  6111. +      load_end--;
  6112. +      hdr.moh_n_load_cmds--;
  6113. +    }
  6114. +
  6115. +  /* Go through and process each symbol table section.  */
  6116. +  symbol_load_cmds = 0;
  6117. +  for (load_cmd = load_array; load_cmd < load_end; load_cmd++)
  6118. +    {
  6119. +      load_union_t *load_hdr = load_cmd->load;
  6120. +
  6121. +      if (load_hdr->hdr.ldci_cmd_type == LDC_SYMBOLS)
  6122. +    {
  6123. +      symbol_load_cmds++;
  6124. +
  6125. +      if (debug)
  6126. +        {
  6127. +          char *kind = "unknown";
  6128. +
  6129. +          switch (load_hdr->sym.symc_kind)
  6130. +        {
  6131. +        case SYMC_IMPORTS:       kind = "imports"; break;
  6132. +        case SYMC_DEFINED_SYMBOLS: kind = "defined"; break;
  6133. +        case SYMC_STABS:       kind = "stabs";   break;
  6134. +        }
  6135. +
  6136. +          notice ("\nProcessing symbol table #%d, offset = 0x%.8lx, kind = %s\n",
  6137. +              symbol_load_cmds, load_hdr->hdr.ldci_section_off, kind);
  6138. +        }
  6139. +
  6140. +      if (load_hdr->sym.symc_kind != SYMC_DEFINED_SYMBOLS)
  6141. +        continue;
  6142. +
  6143. +      str_sect = load_array[load_hdr->sym.symc_strings_section].section;
  6144. +      if (str_sect == (char *) 0)
  6145. +        fatal ("string section missing");
  6146. +
  6147. +      if (load_cmd->section == (char *) 0)
  6148. +        fatal ("section pointer missing");
  6149. +
  6150. +      num_syms = load_hdr->sym.symc_nentries;
  6151. +      for (i = 0; i < num_syms; i++)
  6152. +        {
  6153. +          symbol_info_t *sym = ((symbol_info_t *) load_cmd->section) + i;
  6154. +          char *name = sym->si_name.symbol_name + str_sect;
  6155. +
  6156. +          if (name[0] != '_')
  6157. +        continue;
  6158. +
  6159. +          if (rw)
  6160. +        {
  6161. +          char *n = name + strlen (name) - strlen (NAME__MAIN);
  6162. +
  6163. +          if ((n - name) < 0 || strcmp (n, NAME__MAIN))
  6164. +            continue;
  6165. +          while (n != name)
  6166. +            if (*--n != '_')
  6167. +              continue;
  6168. +
  6169. +          main_sym = sym;
  6170. +        }
  6171. +          else
  6172. +        {
  6173. +          switch (is_ctor_dtor (name))
  6174. +            {
  6175. +            case 1:
  6176. +              add_to_list (&constructors, name);
  6177. +              break;
  6178. +
  6179. +            case 2:
  6180. +              add_to_list (&destructors, name);
  6181. +              break;
  6182. +
  6183. +            default:    /* not a constructor or destructor */
  6184. +              continue;
  6185. +            }
  6186. +        }
  6187. +
  6188. +          if (debug)
  6189. +        fprintf (stderr, "\ttype = 0x%.4x, sc = 0x%.2x, flags = 0x%.8x, name = %.30s\n",
  6190. +             sym->si_type, sym->si_sc_type, sym->si_flags, name);
  6191. +        }
  6192. +    }
  6193. +    }
  6194. +
  6195. +  if (symbol_load_cmds == 0)
  6196. +    fatal ("no symbol table found");
  6197. +
  6198. +  /* Update the program file now, rewrite header and load commands.  At present,
  6199. +     we assume that there is enough space after the last load command to insert
  6200. +     one more.  Since the first section written out is page aligned, and the
  6201. +     number of load commands is small, this is ok for the present.  */
  6202. +
  6203. +  if (rw)
  6204. +    {
  6205. +      load_union_t *load_map;
  6206. +      size_t size;
  6207. +
  6208. +      if (cmd_strings == -1)
  6209. +    fatal ("no cmd_strings found");
  6210. +
  6211. +      /* Add __main to initializer list.
  6212. +     If we are building a program instead of a shared library, do not
  6213. +     do anything, since in the current version, you cannot do mallocs
  6214. +     and such in the constructors.  */
  6215. +
  6216. +      if (main_sym != (symbol_info_t *) 0
  6217. +      && ((hdr.moh_flags & MOH_EXECABLE_F) == 0))
  6218. +    add_func_table (&hdr, load_array, main_sym, FNTC_INITIALIZATION);
  6219. +
  6220. +      if (debug)
  6221. +    notice ("\nUpdating header and load commands.\n\n");
  6222. +
  6223. +      hdr.moh_n_load_cmds++;
  6224. +      size = sizeof (load_cmd_map_command_t) + (sizeof (mo_offset_t) * (hdr.moh_n_load_cmds - 1));
  6225. +
  6226. +      /* Create new load command map.  */
  6227. +      if (debug)
  6228. +    notice ("load command map, %d cmds, new size %ld.\n",
  6229. +        (int) hdr.moh_n_load_cmds, (long) size);
  6230. +
  6231. +      load_map = (load_union_t *) xcalloc (1, size);
  6232. +      load_map->map.ldc_header.ldci_cmd_type = LDC_CMD_MAP;
  6233. +      load_map->map.ldc_header.ldci_cmd_size = size;
  6234. +      load_map->map.lcm_ld_cmd_strings = cmd_strings;
  6235. +      load_map->map.lcm_nentries = hdr.moh_n_load_cmds;
  6236. +      load_array[hdr.moh_n_load_cmds-1].load = load_map;
  6237. +
  6238. +      offset = hdr.moh_first_cmd_off;
  6239. +      for (i = 0; i < hdr.moh_n_load_cmds; i++)
  6240. +    {
  6241. +      load_map->map.lcm_map[i] = offset;
  6242. +      if (load_array[i].load->hdr.ldci_cmd_type == LDC_CMD_MAP)
  6243. +        hdr.moh_load_map_cmd_off = offset;
  6244. +
  6245. +      offset += load_array[i].load->hdr.ldci_cmd_size;
  6246. +    }
  6247. +
  6248. +      hdr.moh_sizeofcmds = offset - MO_SIZEOF_RAW_HDR;
  6249. +
  6250. +      if (debug)
  6251. +    print_header (&hdr);
  6252. +
  6253. +      /* Write header */
  6254. +      status = encode_mach_o_hdr (&hdr, obj, MO_SIZEOF_RAW_HDR);
  6255. +      if (status != MO_HDR_CONV_SUCCESS)
  6256. +    bad_header (status);
  6257. +
  6258. +      if (debug)
  6259. +    notice ("writing load commands.\n\n");
  6260. +
  6261. +      /* Write load commands */
  6262. +      offset = hdr.moh_first_cmd_off;
  6263. +      for (i = 0; i < hdr.moh_n_load_cmds; i++)
  6264. +    {
  6265. +      load_union_t *load_hdr = load_array[i].load;
  6266. +      size_t size = load_hdr->hdr.ldci_cmd_size;
  6267. +
  6268. +      if (debug)
  6269. +        print_load_command (load_hdr, offset, i);
  6270. +
  6271. +      bcopy ((char *) load_hdr, (char *) (obj + offset), size);
  6272. +      offset += size;
  6273. +    }
  6274. +    }
  6275. +
  6276. +  end_file (obj_file);
  6277. +
  6278. +  if (close (prog_fd))
  6279. +    fatal_perror ("close %s", prog_name);
  6280. +
  6281. +  if (debug)
  6282. +    fprintf (stderr, "\n");
  6283. +}
  6284. +
  6285. +
  6286. +/* Add a function table to the load commands to call a function
  6287. +   on initiation or termination of the process.  */
  6288. +
  6289. +static void
  6290. +add_func_table (hdr_p, load_array, sym, type)
  6291. +     mo_header_t *hdr_p;        /* pointer to global header */
  6292. +     load_all_t *load_array;        /* array of ptrs to load cmds */
  6293. +     symbol_info_t *sym;        /* pointer to symbol entry */
  6294. +     int type;                /* fntc_type value */
  6295. +{
  6296. +  /* Add a new load command.  */
  6297. +  int num_cmds = ++hdr_p->moh_n_load_cmds;
  6298. +  int load_index = num_cmds - 1;
  6299. +  size_t size = sizeof (func_table_command_t) + sizeof (mo_addr_t);
  6300. +  load_union_t *ptr = xcalloc (1, size);
  6301. +  load_all_t *load_cmd;
  6302. +  int i;
  6303. +
  6304. +  /* Set the unresolved address bit in the header to force the loader to be
  6305. +     used, since kernel exec does not call the initialization functions.  */
  6306. +  hdr_p->moh_flags |= MOH_UNRESOLVED_F;
  6307. +
  6308. +  load_cmd = &load_array[load_index];
  6309. +  load_cmd->load = ptr;
  6310. +  load_cmd->section = (char *) 0;
  6311. +
  6312. +  /* Fill in func table load command.  */
  6313. +  ptr->func.ldc_header.ldci_cmd_type = LDC_FUNC_TABLE;
  6314. +  ptr->func.ldc_header.ldci_cmd_size = size;
  6315. +  ptr->func.ldc_header.ldci_section_off = 0;
  6316. +  ptr->func.ldc_header.ldci_section_len = 0;
  6317. +  ptr->func.fntc_type = type;
  6318. +  ptr->func.fntc_nentries = 1;
  6319. +
  6320. +  /* copy address, turn it from abs. address to (region,offset) if necessary.  */
  6321. +  /* Is the symbol already expressed as (region, offset)?  */
  6322. +  if ((sym->si_flags & SI_ABSOLUTE_VALUE_F) == 0)
  6323. +    {
  6324. +      ptr->func.fntc_entry_loc[i].adr_lcid = sym->si_value.def_val.adr_lcid;
  6325. +      ptr->func.fntc_entry_loc[i].adr_sctoff = sym->si_value.def_val.adr_sctoff;
  6326. +    }
  6327. +
  6328. +  /* If not, figure out which region it's in.  */
  6329. +  else
  6330. +    {
  6331. +      mo_vm_addr_t addr = sym->si_value.abs_val;
  6332. +      int found = 0;
  6333. +
  6334. +      for (i = 0; i < load_index; i++)
  6335. +    {
  6336. +      if (load_array[i].load->hdr.ldci_cmd_type == LDC_REGION)
  6337. +        {
  6338. +          region_command_t *region_ptr = &load_array[i].load->region;
  6339. +
  6340. +          if ((region_ptr->regc_flags & REG_ABS_ADDR_F) != 0
  6341. +          && addr >= region_ptr->regc_addr.vm_addr
  6342. +          && addr <= region_ptr->regc_addr.vm_addr + region_ptr->regc_vm_size)
  6343. +        {
  6344. +          ptr->func.fntc_entry_loc[0].adr_lcid = i;
  6345. +          ptr->func.fntc_entry_loc[0].adr_sctoff = addr - region_ptr->regc_addr.vm_addr;
  6346. +          found++;
  6347. +          break;
  6348. +        }
  6349. +        }
  6350. +    }
  6351. +
  6352. +      if (!found)
  6353. +    fatal ("could not convert 0x%l.8x into a region", addr);
  6354. +    }
  6355. +
  6356. +  if (debug)
  6357. +    notice ("%s function, region %d, offset = %ld (0x%.8lx)\n",
  6358. +        type == FNTC_INITIALIZATION ? "init" : "term",
  6359. +        (int) ptr->func.fntc_entry_loc[i].adr_lcid,
  6360. +        (long) ptr->func.fntc_entry_loc[i].adr_sctoff,
  6361. +        (long) ptr->func.fntc_entry_loc[i].adr_sctoff);
  6362. +
  6363. +}
  6364. +
  6365. +
  6366. +/* Print the global header for an OSF/rose object.  */
  6367. +
  6368. +static void
  6369. +print_header (hdr_ptr)
  6370. +     mo_header_t *hdr_ptr;
  6371. +{
  6372. +  fprintf (stderr, "\nglobal header:\n");
  6373. +  fprintf (stderr, "\tmoh_magic            = 0x%.8lx\n", hdr_ptr->moh_magic);
  6374. +  fprintf (stderr, "\tmoh_major_version    = %d\n", (int)hdr_ptr->moh_major_version);
  6375. +  fprintf (stderr, "\tmoh_minor_version    = %d\n", (int)hdr_ptr->moh_minor_version);
  6376. +  fprintf (stderr, "\tmoh_header_version   = %d\n", (int)hdr_ptr->moh_header_version);
  6377. +  fprintf (stderr, "\tmoh_max_page_size    = %d\n", (int)hdr_ptr->moh_max_page_size);
  6378. +  fprintf (stderr, "\tmoh_byte_order       = %d\n", (int)hdr_ptr->moh_byte_order);
  6379. +  fprintf (stderr, "\tmoh_data_rep_id      = %d\n", (int)hdr_ptr->moh_data_rep_id);
  6380. +  fprintf (stderr, "\tmoh_cpu_type         = %d\n", (int)hdr_ptr->moh_cpu_type);
  6381. +  fprintf (stderr, "\tmoh_cpu_subtype      = %d\n", (int)hdr_ptr->moh_cpu_subtype);
  6382. +  fprintf (stderr, "\tmoh_vendor_type      = %d\n", (int)hdr_ptr->moh_vendor_type);
  6383. +  fprintf (stderr, "\tmoh_load_map_cmd_off = %d\n", (int)hdr_ptr->moh_load_map_cmd_off);
  6384. +  fprintf (stderr, "\tmoh_first_cmd_off    = %d\n", (int)hdr_ptr->moh_first_cmd_off);
  6385. +  fprintf (stderr, "\tmoh_sizeofcmds       = %d\n", (int)hdr_ptr->moh_sizeofcmds);
  6386. +  fprintf (stderr, "\tmon_n_load_cmds      = %d\n", (int)hdr_ptr->moh_n_load_cmds);
  6387. +  fprintf (stderr, "\tmoh_flags            = 0x%.8lx", (long)hdr_ptr->moh_flags);
  6388. +
  6389. +  if (hdr_ptr->moh_flags & MOH_RELOCATABLE_F)
  6390. +    fprintf (stderr, ", relocatable");
  6391. +
  6392. +  if (hdr_ptr->moh_flags & MOH_LINKABLE_F)
  6393. +    fprintf (stderr, ", linkable");
  6394. +
  6395. +  if (hdr_ptr->moh_flags & MOH_EXECABLE_F)
  6396. +    fprintf (stderr, ", execable");
  6397. +
  6398. +  if (hdr_ptr->moh_flags & MOH_EXECUTABLE_F)
  6399. +    fprintf (stderr, ", executable");
  6400. +
  6401. +  if (hdr_ptr->moh_flags & MOH_UNRESOLVED_F)
  6402. +    fprintf (stderr, ", unresolved");
  6403. +
  6404. +  fprintf (stderr, "\n\n");
  6405. +  return;
  6406. +}
  6407. +
  6408. +
  6409. +/* Print a short summary of a load command.  */
  6410. +
  6411. +static void
  6412. +print_load_command (load_hdr, offset, number)
  6413. +     load_union_t *load_hdr;
  6414. +     size_t offset;
  6415. +     int number;
  6416. +{
  6417. +  mo_long_t type = load_hdr->hdr.ldci_cmd_type;
  6418. +  char *type_str = (char *) 0;
  6419. +
  6420. +  switch (type)
  6421. +    {
  6422. +    case LDC_UNDEFINED:   type_str = "UNDEFINED";    break;
  6423. +    case LDC_CMD_MAP:      type_str = "CMD_MAP";        break;
  6424. +    case LDC_INTERPRETER: type_str = "INTERPRETER";    break;
  6425. +    case LDC_STRINGS:      type_str = "STRINGS";        break;
  6426. +    case LDC_REGION:      type_str = "REGION";        break;
  6427. +    case LDC_RELOC:      type_str = "RELOC";        break;
  6428. +    case LDC_PACKAGE:      type_str = "PACKAGE";        break;
  6429. +    case LDC_SYMBOLS:      type_str = "SYMBOLS";        break;
  6430. +    case LDC_ENTRY:      type_str = "ENTRY";        break;
  6431. +    case LDC_FUNC_TABLE:  type_str = "FUNC_TABLE";    break;
  6432. +    case LDC_GEN_INFO:      type_str = "GEN_INFO";    break;
  6433. +    }
  6434. +
  6435. +  fprintf (stderr,
  6436. +       "cmd %2d, sz: 0x%.2lx, coff: 0x%.3lx, doff: 0x%.6lx, dlen: 0x%.6lx",
  6437. +       number,
  6438. +       (long) load_hdr->hdr.ldci_cmd_size,
  6439. +       (long) offset,
  6440. +       (long) load_hdr->hdr.ldci_section_off,
  6441. +       (long) load_hdr->hdr.ldci_section_len);
  6442. +
  6443. +  if (type_str == (char *) 0)
  6444. +    fprintf (stderr, ", ty: unknown (%ld)\n", (long) type);
  6445. +
  6446. +  else if (type != LDC_REGION)
  6447. +    fprintf (stderr, ", ty: %s\n", type_str);
  6448. +
  6449. +  else
  6450. +    {
  6451. +      char *region = "";
  6452. +      switch (load_hdr->region.regc_usage_type)
  6453. +    {
  6454. +    case REG_TEXT_T:    region = ", .text";    break;
  6455. +    case REG_DATA_T:    region = ", .data";    break;
  6456. +    case REG_BSS_T:        region = ", .bss";    break;
  6457. +    case REG_GLUE_T:    region = ", .glue";    break;
  6458. +#if defined (REG_RDATA_T) && defined (REG_SDATA_T) && defined (REG_SBSS_T) /*mips*/
  6459. +    case REG_RDATA_T:    region = ", .rdata";    break;
  6460. +    case REG_SDATA_T:    region = ", .sdata";    break;
  6461. +    case REG_SBSS_T:    region = ", .sbss";    break;
  6462. +#endif
  6463. +    }
  6464. +
  6465. +      fprintf (stderr, ", ty: %s, vaddr: 0x%.8lx, vlen: 0x%.6lx%s\n",
  6466. +           type_str,
  6467. +           (long) load_hdr->region.regc_vm_addr,
  6468. +           (long) load_hdr->region.regc_vm_size,
  6469. +           region);
  6470. +    }
  6471. +
  6472. +  return;
  6473. +}
  6474. +
  6475. +
  6476. +/* Fatal error when {en,de}code_mach_o_header fails.  */
  6477. +
  6478. +static void
  6479. +bad_header (status)
  6480. +     int status;
  6481. +{
  6482. +  switch (status)
  6483. +    {
  6484. +    case MO_ERROR_BAD_MAGIC:        fatal ("bad magic number");
  6485. +    case MO_ERROR_BAD_HDR_VERS:        fatal ("bad header version");
  6486. +    case MO_ERROR_BAD_RAW_HDR_VERS:    fatal ("bad raw header version");
  6487. +    case MO_ERROR_BUF2SML:        fatal ("raw header buffer too small");
  6488. +    case MO_ERROR_OLD_RAW_HDR_FILE:    fatal ("old raw header file");
  6489. +    case MO_ERROR_UNSUPPORTED_VERS:    fatal ("unsupported version");
  6490. +    default:
  6491. +      fatal ("unknown {de,en}code_mach_o_hdr return value %d", status);
  6492. +    }
  6493. +}
  6494. +
  6495. +
  6496. +/* Read a file into a memory buffer.  */
  6497. +
  6498. +static struct file_info *
  6499. +read_file (name, fd, rw)
  6500. +     char *name;        /* filename */
  6501. +     int fd;            /* file descriptor */
  6502. +     int rw;            /* read/write */
  6503. +{
  6504. +  struct stat stat_pkt;
  6505. +  struct file_info *p = (struct file_info *) xcalloc (sizeof (struct file_info), 1);
  6506. +#ifdef USE_MMAP
  6507. +  static int page_size;
  6508. +#endif
  6509. +
  6510. +  if (fstat (fd, &stat_pkt) < 0)
  6511. +    fatal_perror ("fstat %s", name);
  6512. +
  6513. +  p->name      = name;
  6514. +  p->size      = stat_pkt.st_size;
  6515. +  p->rounded_size = stat_pkt.st_size;
  6516. +  p->fd          = fd;
  6517. +  p->rw          = rw;
  6518. +
  6519. +#ifdef USE_MMAP
  6520. +  if (debug)
  6521. +    fprintf (stderr, "mmap %s, %s\n", name, (rw) ? "read/write" : "read-only");
  6522. +
  6523. +  if (page_size == 0)
  6524. +    page_size = sysconf (_SC_PAGE_SIZE);
  6525. +
  6526. +  p->rounded_size = ((p->size + page_size - 1) / page_size) * page_size;
  6527. +  p->start = mmap ((caddr_t) 0,
  6528. +           (rw) ? p->rounded_size : p->size,
  6529. +           (rw) ? (PROT_READ | PROT_WRITE) : PROT_READ,
  6530. +           MAP_FILE | MAP_VARIABLE | MAP_SHARED,
  6531. +           fd,
  6532. +           0L);
  6533. +
  6534. +  if (p->start != (char *) 0 && p->start != (char *) -1)
  6535. +    p->use_mmap = 1;
  6536. +
  6537. +  else
  6538. +#endif /* USE_MMAP */
  6539. +    {
  6540. +      long len;
  6541. +
  6542. +      if (debug)
  6543. +    fprintf (stderr, "read %s\n", name);
  6544. +
  6545. +      p->use_mmap = 0;
  6546. +      p->start = xmalloc (p->size);
  6547. +      if (lseek (fd, 0L, SEEK_SET) < 0)
  6548. +    fatal_perror ("lseek %s 0", name);
  6549. +
  6550. +      len = read (fd, p->start, p->size);
  6551. +      if (len < 0)
  6552. +    fatal_perror ("read %s", name);
  6553. +
  6554. +      if (len != p->size)
  6555. +    fatal ("read %ld bytes, expected %ld, from %s", len, p->size, name);
  6556. +    }
  6557. +
  6558. +  return p;
  6559. +}
  6560. +
  6561. +/* Do anything necessary to write a file back from memory.  */
  6562. +
  6563. +static void
  6564. +end_file (ptr)
  6565. +     struct file_info *ptr;    /* file information block */
  6566. +{
  6567. +#ifdef USE_MMAP
  6568. +  if (ptr->use_mmap)
  6569. +    {
  6570. +      if (ptr->rw)
  6571. +    {
  6572. +      if (debug)
  6573. +        fprintf (stderr, "msync %s\n", ptr->name);
  6574. +
  6575. +      if (msync (ptr->start, ptr->rounded_size, MS_ASYNC))
  6576. +        fatal_perror ("msync %s", ptr->name);
  6577. +    }
  6578. +
  6579. +      if (debug)
  6580. +    fprintf (stderr, "munmap %s\n", ptr->name);
  6581. +
  6582. +      if (munmap (ptr->start, ptr->size))
  6583. +    fatal_perror ("munmap %s", ptr->name);
  6584. +    }
  6585. +  else
  6586. +#endif /* USE_MMAP */
  6587. +    {
  6588. +      if (ptr->rw)
  6589. +    {
  6590. +      long len;
  6591. +
  6592. +      if (debug)
  6593. +        fprintf (stderr, "write %s\n", ptr->name);
  6594. +
  6595. +      if (lseek (ptr->fd, 0L, SEEK_SET) < 0)
  6596. +        fatal_perror ("lseek %s 0", ptr->name);
  6597. +
  6598. +      len = write (ptr->fd, ptr->start, ptr->size);
  6599. +      if (len < 0)
  6600. +        fatal_perror ("write %s", ptr->name);
  6601. +
  6602. +      if (len != ptr->size)
  6603. +        fatal ("wrote %ld bytes, expected %ld, to %s", len, ptr->size, ptr->name);
  6604. +    }
  6605. +
  6606. +      free (ptr->start);
  6607. +    }
  6608. +
  6609. +  free (ptr);
  6610. +}
  6611. +
  6612. +#endif /* OBJECT_FORMAT_ROSE */
  6613. +
  6614. +void empty_undef_list(void)
  6615. +{
  6616. +    struct undef_list_node *cur;
  6617. +    struct undef_list_node *next;
  6618. +
  6619. +    cur = undef_list.next; 
  6620. +
  6621. +    while (cur)
  6622. +    {
  6623. +        next = cur->next;
  6624. +
  6625. +        if (cur->name)
  6626. +            free(cur->name);
  6627. +        
  6628. +        free(cur);
  6629. +
  6630. +        cur = next;
  6631. +    }
  6632. +}
  6633. +
  6634. +struct undef_list_node *find_undef_list(char *name)
  6635. +{
  6636. +    struct undef_list_node *cur;
  6637. +
  6638. +    for (cur = undef_list.next; cur; cur = cur->next)
  6639. +    {
  6640. +        if (strcmp(cur->name, name) == 0)
  6641. +            return cur;
  6642. +    }
  6643. +
  6644. +    return 0;
  6645. +}
  6646. +
  6647. +
  6648. +void add_undef_list(char *name)
  6649. +{
  6650. +    struct undef_list_node *newnode;
  6651. +    struct undef_list_node *prev;
  6652. +    struct undef_list_node *cur;
  6653. +
  6654. +    newnode = xmalloc(sizeof (struct undef_list_node));
  6655. +    newnode->name = strdup(name);
  6656. +    newnode->reported = 0;
  6657. +    
  6658. +    prev = &undef_list;
  6659. +    cur = undef_list.next;
  6660. +
  6661. +    do
  6662. +    {
  6663. +        int res;
  6664. +
  6665. +        if (cur)
  6666. +            res = strcmp(cur->name, newnode->name);
  6667. +        else
  6668. +        {
  6669. +            prev->next = newnode;
  6670. +            newnode->next = cur;
  6671. +            return;
  6672. +        }
  6673. +
  6674. +
  6675. +        if (res == 0)
  6676. +        {
  6677. +            free(newnode->name);
  6678. +            free(newnode);
  6679. +            return;
  6680. +        }
  6681. +
  6682. +        if (res > 0)
  6683. +        {
  6684. +            prev->next = newnode;
  6685. +            newnode->next = cur;
  6686. +            return;
  6687. +        }
  6688. +
  6689. +        prev = cur;
  6690. +        cur = cur->next;
  6691. +    } while (cur);
  6692. +
  6693. +    prev->next = newnode;
  6694. +    newnode->next = cur;
  6695. +}
  6696. +
  6697. +void report_undef_list(char **object_lst)
  6698. +{
  6699. +    struct undef_list_node *cur;
  6700. +    int pipe_fd[2];
  6701. +    int numargs;
  6702. +    char **nm_argv;
  6703. +    int argc;
  6704. +    void (*int_handler) ();
  6705. +    void (*quit_handler) ();
  6706. +    char buf[2048];
  6707. +    FILE *inf;
  6708. +    int pid;
  6709. +    int print_head = 1;
  6710. +    char *scmd,*s;
  6711. +    int i,j,len,arglen,c,need_quote;
  6712. +
  6713. +    cur = undef_list.next; 
  6714. +    if (!cur)
  6715. +        return;
  6716. +
  6717. +    /* Count number of object files */
  6718. +    for (numargs = 0; object_lst[numargs]; numargs++)
  6719. +    {
  6720. +        if (debug)
  6721. +            fprintf (stderr, "Object file %s\n", object_lst[numargs]);
  6722. +    }
  6723. +
  6724. +    fflush(stderr);
  6725. +
  6726. +    /* Build arguments for nm */
  6727. +    if (nm_file_name == 0)
  6728. +        fatal ("cannot find `nm'");
  6729. +
  6730. +    nm_argv = xmalloc(sizeof(char *)*(numargs+5));
  6731. +    
  6732. +    argc = 0;
  6733. +
  6734. +    nm_argv[argc++] = nm_file_name;
  6735. +    nm_argv[argc++] = "-A";
  6736. +    nm_argv[argc++] = "-u";
  6737. +
  6738. +    for (i = 0; i < numargs; i++)
  6739. +        nm_argv[argc++] = object_lst[i];
  6740. +    
  6741. +    nm_argv[argc++] = 0;
  6742. +
  6743. +  len = 0;
  6744. +
  6745. +  for(i = 0 ; nm_argv[i] != NULL ; i++)
  6746. +  {
  6747. +    arglen = strlen(nm_argv[i]);
  6748. +
  6749. +    len += 1 + arglen;
  6750. +
  6751. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  6752. +    {
  6753. +      c = nm_argv[i][j];
  6754. +
  6755. +      if(c == ' ')
  6756. +        need_quote = 1;
  6757. +      else if (c == '\"')
  6758. +        len++;
  6759. +    }
  6760. +
  6761. +    if(need_quote)
  6762. +      len += 2;
  6763. +  }
  6764. +
  6765. +  s = scmd = (char *) xmalloc (len+1);
  6766. +
  6767. +  for(i = 0 ; nm_argv[i] != NULL ; i++)
  6768. +  {
  6769. +    arglen = strlen(nm_argv[i]);
  6770. +
  6771. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  6772. +    {
  6773. +      if(nm_argv[i][j] == ' ')
  6774. +        need_quote = 1;
  6775. +    }
  6776. +
  6777. +    if(s != scmd)
  6778. +      (*s++) = ' ';
  6779. +
  6780. +    if(need_quote)
  6781. +      (*s++) = '\"';
  6782. +
  6783. +    for(j = 0 ; j < arglen ; j++)
  6784. +    {
  6785. +      c = nm_argv[i][j];
  6786. +      if(c == '\"')
  6787. +        (*s++) = '*';
  6788. +
  6789. +      (*s++) = c;
  6790. +    }
  6791. +
  6792. +    if(need_quote)
  6793. +      (*s++) = '\"';
  6794. +  }
  6795. +
  6796. +  (*s) = '\0';
  6797. +
  6798. +  /* Trace if needed.  */
  6799. +  if (vflag)
  6800. +    {
  6801. +      char **p_argv;
  6802. +      char *str;
  6803. +
  6804. +      for (p_argv = &nm_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
  6805. +    fprintf (stderr, " %s", str);
  6806. +
  6807. +      fprintf (stderr, "\n");
  6808. +    }
  6809. +
  6810. +  fflush (stdout);
  6811. +  fflush (stderr);
  6812. +
  6813. +  inf = popen(scmd,"r");
  6814. +  if (inf == (FILE *) NULL)
  6815. +    fatal_perror ("popen");
  6816. +
  6817. +  free(scmd);
  6818. +#if 0
  6819. +    while (fgets (buf, sizeof buf, inf) != (char *) 0)
  6820. +    {
  6821. +        char *filename;
  6822. +        char *symname;
  6823. +        char *end;
  6824. +        struct undef_list_node *node;
  6825. +
  6826. +        /* Scan the nm output */
  6827. +        filename = buf;
  6828. +        symname = strchr(buf, ':');
  6829. +
  6830. +        /* Check for malformed line (shouldn't happen) */
  6831. +        if (!symname)
  6832. +            continue;
  6833. +
  6834. +        /* Seperate filename */
  6835. +        *symname++ = 0;
  6836. +
  6837. +        /* Kill off \n at end of line */
  6838. +        end = strchr(symname, '\n');
  6839. +        if (end)
  6840. +            *end = 0;
  6841. +
  6842. +        /* Find the node */
  6843. +        node = find_undef_list(symname);
  6844. +        
  6845. +        if (node)
  6846. +        {
  6847. +            fprintf(stderr, "%s: Undefined reference to %s\n", filename, symname);
  6848. +            node->reported++;
  6849. +        }
  6850. +        
  6851. +
  6852. +    }
  6853. +
  6854. +#endif
  6855. +    if (fclose (inf) != 0)
  6856. +        fatal_perror ("fclose");
  6857. +    
  6858. +    do_wait (nm_file_name);
  6859. +    
  6860. +    signal (SIGINT,  int_handler);
  6861. +#ifdef SIGQUIT
  6862. +    signal (SIGQUIT, quit_handler);
  6863. +#endif 
  6864. +    /* Show remaining (if any) */
  6865. +    cur = undef_list.next; 
  6866. +
  6867. +    while (cur)
  6868. +    {
  6869. +        if (!cur->reported)
  6870. +        {
  6871. +            if (print_head)
  6872. +            {
  6873. +                print_head = 0;
  6874. +                fprintf(stderr, "Other undefined references:\n");
  6875. +            }
  6876. +            fprintf(stderr, "Undefined reference to `%s'\n", cur->name);
  6877. +        }
  6878. +
  6879. +        cur = cur->next;
  6880. +    }
  6881. +
  6882. +    collect_exit (FATAL_EXIT_CODE);
  6883. +}
  6884. diff -urNEBb gcc-2.95.3-orig/gcc/c-typeck.c gcc-2.95.3/gcc/c-typeck.c
  6885. --- gcc-2.95.3-orig/gcc/c-typeck.c    2001-01-25 15:03:00.000000000 +0100
  6886. +++ gcc-2.95.3/gcc/c-typeck.c    2003-12-02 17:50:55.000000000 +0100
  6887. @@ -1569,6 +1569,14 @@
  6888.    /* fntype now gets the type of function pointed to.  */
  6889.    fntype = TREE_TYPE (fntype);
  6890.  
  6891. +  if (lookup_attribute("libcall", TYPE_ATTRIBUTES(fntype))) 
  6892. +   if (TREE_CODE(function)==COMPONENT_REF)
  6893. +    params = chainon (build_tree_list(NULL_TREE, 
  6894. +                                      build1(ADDR_EXPR,build_pointer_type(TREE_TYPE(TREE_OPERAND(function,0))),
  6895. +                             TREE_OPERAND(function,0))
  6896. +                      )
  6897. +              , params);
  6898. +
  6899.    /* Convert the parameters to the types declared in the
  6900.       function prototype, or apply default promotions.  */
  6901.  
  6902. diff -urNEBb gcc-2.95.3-orig/gcc/cccp.c gcc-2.95.3/gcc/cccp.c
  6903. --- gcc-2.95.3-orig/gcc/cccp.c    2001-01-25 15:03:00.000000000 +0100
  6904. +++ gcc-2.95.3/gcc/cccp.c    2003-12-02 17:50:55.000000000 +0100
  6905. @@ -85,7 +85,7 @@
  6906.  
  6907.  /* Windows does not natively support inodes, and neither does MSDOS.  */
  6908.  #if (defined (_WIN32) && ! defined (__CYGWIN__) && ! defined (_UWIN)) \
  6909. -  || defined (__MSDOS__)
  6910. +  || defined (__MSDOS__) || defined (__amigaos__)
  6911.  #define INO_T_EQ(a, b) 0
  6912.  #endif
  6913.  
  6914. @@ -101,8 +101,15 @@
  6915.  #define INCLUDE_LEN_FUDGE 0
  6916.  #endif
  6917.  
  6918. +#undef OPEN_CASE_SENSITIVE
  6919. +
  6920.  /* External declarations.  */
  6921.  
  6922. +#ifndef OPEN_CASE_SENSITIVE
  6923. +/* Default is standard open() */
  6924. +#define OPEN_CASE_SENSITIVE open
  6925. +#endif
  6926. +
  6927.  extern char *version_string;
  6928.  HOST_WIDEST_INT parse_escape PROTO((char **, HOST_WIDEST_INT));
  6929.  HOST_WIDEST_INT parse_c_expression PROTO((char *, int));
  6930. @@ -1918,7 +1925,12 @@
  6931.      notice ("#include <...> search starts here:\n");
  6932.        if (!p->fname[0])
  6933.      fprintf (stderr, " .\n");
  6934. -      else if (!strcmp (p->fname, "/") || !strcmp (p->fname, "//"))
  6935. +      else if (!strcmp (p->fname, "/") || !strcmp (p->fname, "//")
  6936. +#ifdef VOL_SEPARATOR
  6937. +    /* Don't omit the last character if it's not a '/'.  */
  6938. +           || p->fname[strlen (p->fname) - 1] != '/'
  6939. +#endif
  6940. +           )
  6941.      fprintf (stderr, " %s\n", p->fname);
  6942.        else
  6943.      /* Omit trailing '/'.  */
  6944. @@ -4785,6 +4797,9 @@
  6945.  #ifdef DIR_SEPARATOR
  6946.    if ((p = rindex (s, DIR_SEPARATOR))) s = p + 1;
  6947.  #endif
  6948. +#ifdef VOL_SEPARATOR
  6949. +  if ((p = rindex (s, VOL_SEPARATOR))) s = p + 1;
  6950. +#endif
  6951.    return s;
  6952.  }
  6953.  
  6954. @@ -4794,6 +4809,7 @@
  6955.  absolute_filename (filename)
  6956.       char *filename;
  6957.  {
  6958. +#ifndef FILE_NAME_ABSOLUTE_P
  6959.  #if defined (__MSDOS__) \
  6960.    || (defined (_WIN32) && !defined (__CYGWIN__) && !defined (_UWIN))
  6961.    if (ISALPHA (filename[0]) && filename[1] == ':') filename += 2;
  6962. @@ -4810,6 +4826,9 @@
  6963.    if (filename[0] == DIR_SEPARATOR) return 1;
  6964.  #endif
  6965.    return 0;
  6966. +#else /* FILE_NAME_ABSOLUTE_P */
  6967. +  return FILE_NAME_ABSOLUTE_P (filename);
  6968. +#endif /* FILE_NAME_ABSOLUTE_P */
  6969.  }
  6970.  
  6971.  /* Returns whether or not a given character is a directory separator.
  6972. @@ -5072,7 +5091,7 @@
  6973.        || ! inc->control_macro
  6974.        || (inc->control_macro[0] && ! lookup (inc->control_macro, -1, -1))) {
  6975.  
  6976. -    fd = open (fname, O_RDONLY, 0);
  6977. +    fd = OPEN_CASE_SENSITIVE (fname, O_RDONLY, 0);
  6978.  
  6979.      if (fd < 0)
  6980.        {
  6981. @@ -10406,7 +10425,12 @@
  6982.      len = simplify_filename (dir->fname);
  6983.  
  6984.      /* Convert directory name to a prefix.  */
  6985. -    if (len && dir->fname[len - 1] != DIR_SEPARATOR) {
  6986. +    if (len && dir->fname[len - 1] != DIR_SEPARATOR
  6987. +#ifdef VOL_SEPARATOR
  6988. +    && dir->fname[len - 1] != VOL_SEPARATOR
  6989. +#endif
  6990. +    )
  6991. +    {
  6992.        if (len == 1 && dir->fname[len - 1] == '.')
  6993.      len = 0;
  6994.        else
  6995. diff -urNEBb gcc-2.95.3-orig/gcc/collect2.c gcc-2.95.3/gcc/collect2.c
  6996. --- gcc-2.95.3-orig/gcc/collect2.c    2001-01-25 15:03:01.000000000 +0100
  6997. +++ gcc-2.95.3/gcc/collect2.c    2003-12-06 19:26:25.000000000 +0100
  6998. @@ -30,6 +30,11 @@
  6999.  #include "system.h"
  7000.  #include <signal.h>
  7001.  
  7002. +#ifdef __amigaos4__
  7003. +#define NSIG 6
  7004. +#define NO_SYS_SIGLIST
  7005. +#endif
  7006. +
  7007.  #ifdef vfork /* Autoconf may define this to fork for us. */
  7008.  # define VFORK_STRING "fork"
  7009.  #else
  7010. @@ -1094,6 +1099,9 @@
  7011.  #endif
  7012.  
  7013.    /* Extract COMPILER_PATH and PATH into our prefix list.  */
  7014. +#ifdef __amigaos4__
  7015. +  prefix_from_string ("/gcc/bin", &cpath);
  7016. +#endif    
  7017.    prefix_from_env ("COMPILER_PATH", &cpath);
  7018.    prefix_from_env ("PATH", &path);
  7019.  
  7020. @@ -2238,6 +2246,8 @@
  7021.     constructor functions, terminated with a null pointer.  The
  7022.     destructor table has the same format, and begins at __DTOR_LIST__.  */
  7023.  
  7024. +#ifndef __amigaos4__
  7025. +
  7026.  static void
  7027.  scan_prog_file (prog_name, which_pass)
  7028.       char *prog_name;
  7029. @@ -2400,7 +2410,199 @@
  7030.    signal (SIGQUIT, quit_handler);
  7031.  #endif
  7032.  }
  7033. +#else
  7034. +
  7035. +
  7036. +static void
  7037. +scan_prog_file (prog_name, which_pass)
  7038. +     char *prog_name;
  7039. +     enum pass which_pass;
  7040. +{
  7041. +  void (*int_handler) ();
  7042. +  void (*quit_handler) ();
  7043. +  char *nm_argv[4];
  7044. +  int pid;
  7045. +  int argc = 0;
  7046. +  int pipe_fd[2];
  7047. +  char *p, buf[1024];
  7048. +  FILE *inf;
  7049. +  char *scmd,*s;
  7050. +  int i, j,len,arglen,c,need_quote;
  7051. +
  7052. +  if (which_pass == PASS_SECOND)
  7053. +    return;
  7054. +
  7055. +  /* If we do not have an `nm', complain.  */
  7056. +  if (nm_file_name == 0)
  7057. +    fatal ("cannot find `nm'");
  7058. +
  7059. +  nm_argv[argc++] = nm_file_name;
  7060. +  if (NM_FLAGS[0] != '\0')
  7061. +    nm_argv[argc++] = NM_FLAGS;
  7062. +
  7063. +  nm_argv[argc++] = prog_name;
  7064. +  nm_argv[argc++] = (char *) 0;
  7065. +
  7066. +
  7067. +  len = 0;
  7068. +
  7069. +  for(i = 0 ; nm_argv[i] != NULL ; i++)
  7070. +  {
  7071. +    arglen = strlen(nm_argv[i]);
  7072. +
  7073. +    len += 1 + arglen;
  7074. +
  7075. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  7076. +    {
  7077. +      c = nm_argv[i][j];
  7078. +
  7079. +      if(c == ' ')
  7080. +        need_quote = 1;
  7081. +      else if (c == '\"')
  7082. +        len++;
  7083. +    }
  7084. +
  7085. +    if(need_quote)
  7086. +      len += 2;
  7087. +  }
  7088. +
  7089. +  s = scmd = (char *) xmalloc (len+1);
  7090. +
  7091. +  for(i = 0 ; nm_argv[i] != NULL ; i++)
  7092. +  {
  7093. +    arglen = strlen(nm_argv[i]);
  7094. +
  7095. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  7096. +    {
  7097. +      if(nm_argv[i][j] == ' ')
  7098. +        need_quote = 1;
  7099. +    }
  7100. +
  7101. +    if(s != scmd)
  7102. +      (*s++) = ' ';
  7103. +
  7104. +    if(need_quote)
  7105. +      (*s++) = '\"';
  7106. +
  7107. +    for(j = 0 ; j < arglen ; j++)
  7108. +    {
  7109. +      c = nm_argv[i][j];
  7110. +      if(c == '\"')
  7111. +        (*s++) = '*';
  7112. +
  7113. +      (*s++) = c;
  7114. +    }
  7115. +
  7116. +    if(need_quote)
  7117. +      (*s++) = '\"';
  7118. +  }
  7119. +
  7120. +  (*s) = '\0';
  7121. +
  7122. +  /* Trace if needed.  */
  7123. +  if (vflag)
  7124. +    {
  7125. +      char **p_argv;
  7126. +      char *str;
  7127. +
  7128. +      for (p_argv = &nm_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
  7129. +    fprintf (stderr, " %s", str);
  7130. +
  7131. +      fprintf (stderr, "\n");
  7132. +    }
  7133. +
  7134. +  fflush (stdout);
  7135. +  fflush (stderr);
  7136. +
  7137. +  inf = popen(scmd,"r");
  7138. +  if (inf == (FILE *) NULL)
  7139. +    fatal_perror ("popen");
  7140. +
  7141. +  free(scmd);
  7142. +
  7143. +  if (debug)
  7144. +    fprintf (stderr, "\nnm output with constructors/destructors.\n");
  7145. +
  7146. +  /* Read each line of nm output.  */
  7147. +  while (fgets (buf, sizeof buf, inf) != (char *) 0)
  7148. +    {
  7149. +      int ch, ch2;
  7150. +      char *name, *end;
  7151. +      
  7152. +      /* If it contains a constructor or destructor name, add the name
  7153. +     to the appropriate list.  */
  7154. +
  7155. +      for (p = buf; (ch = *p) != '\0' && ch != '\n' && ch != '_'; p++)
  7156. +    if (ch == ' ' && p[1] == 'U' && p[2] == ' ')
  7157. +      break;
  7158. +
  7159. +      if (ch != '_')
  7160. +    continue;
  7161. +  
  7162. +      name = p;
  7163. +      /* Find the end of the symbol name.
  7164. +     Do not include `|', because Encore nm can tack that on the end.  */
  7165. +      for (end = p; (ch2 = *end) != '\0' && !ISSPACE (ch2) && ch2 != '|';
  7166. +       end++)
  7167. +    continue;
  7168. +
  7169. +
  7170. +      *end = '\0';
  7171. +
  7172. +      switch (is_ctor_dtor (name))
  7173. +    {
  7174. +    case 1:
  7175. +      if (which_pass != PASS_LIB)
  7176. +        add_to_list (&constructors, name);
  7177. +      break;
  7178. +
  7179. +    case 2:
  7180. +      if (which_pass != PASS_LIB)
  7181. +        add_to_list (&destructors, name);
  7182. +      break;
  7183. +
  7184. +    case 3:
  7185. +      if (which_pass != PASS_LIB)
  7186. +        fatal ("init function found in object %s", prog_name);
  7187. +#ifndef LD_INIT_SWITCH
  7188. +      add_to_list (&constructors, name);
  7189. +#endif
  7190. +      break;
  7191. +
  7192. +    case 4:
  7193. +      if (which_pass != PASS_LIB)
  7194. +        fatal ("fini function found in object %s", prog_name);
  7195. +#ifndef LD_FINI_SWITCH
  7196. +      add_to_list (&destructors, name);
  7197. +#endif
  7198. +      break;
  7199. +
  7200. +    case 5:
  7201. +      if (which_pass != PASS_LIB)
  7202. +        add_to_list (&frame_tables, name);
  7203. +      break;
  7204. +
  7205. +    default:        /* not a constructor or destructor */
  7206. +      continue;
  7207. +    }
  7208. +
  7209. +      if (debug)
  7210. +    fprintf (stderr, "\t%s\n", buf);
  7211. +    }
  7212. +
  7213. +  if (debug)
  7214. +    fprintf (stderr, "\n");
  7215. +
  7216. +  if (fclose (inf) != 0)
  7217. +    fatal_perror ("fclose");
  7218. +
  7219. +  signal (SIGINT,  int_handler);
  7220. +#ifdef SIGQUIT
  7221. +  signal (SIGQUIT, quit_handler);
  7222. +#endif
  7223. +}
  7224.  
  7225. +#endif
  7226.  #if SUNOS4_SHARED_LIBRARIES
  7227.  
  7228.  /* Routines to scan the SunOS 4 _DYNAMIC structure to find shared libraries
  7229. @@ -2571,9 +2773,14 @@
  7230.            }
  7231.      }
  7232.        /* built in directories are /lib, /usr/lib, and /usr/local/lib */
  7233. +#ifdef __amigaos4__
  7234. +      *pp++ = "/gcc/lib";
  7235. +      *pp++ = "/gcc/local/lib";
  7236. +#else
  7237.        *pp++ = "/lib";
  7238.        *pp++ = "/usr/lib";
  7239.        *pp++ = "/usr/local/lib";
  7240. +#endif      
  7241.        *pp = 0;
  7242.      }
  7243.    libname = name;
  7244. diff -urNEBb gcc-2.95.3-orig/gcc/config/arm/coff.h gcc-2.95.3/gcc/config/arm/coff.h
  7245. --- gcc-2.95.3-orig/gcc/config/arm/coff.h    1999-03-22 17:32:25.000000000 +0100
  7246. +++ gcc-2.95.3/gcc/config/arm/coff.h    2003-12-02 17:50:55.000000000 +0100
  7247. @@ -41,9 +41,10 @@
  7248.     command line option -mstructure_size_boundary=<n> can be used to change this
  7249.     value.  */
  7250.  #undef  STRUCTURE_SIZE_BOUNDARY
  7251. -#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary
  7252. +/*#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary*/
  7253. +#define STRUCTURE_SIZE_BOUNDARY 32
  7254.  
  7255. -extern int arm_structure_size_boundary;
  7256. +/*extern int arm_structure_size_boundary;*/
  7257.  
  7258.  /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
  7259.     is a valid machine specific attribute for DECL.
  7260. diff -urNEBb gcc-2.95.3-orig/gcc/config/arm/elf.h gcc-2.95.3/gcc/config/arm/elf.h
  7261. --- gcc-2.95.3-orig/gcc/config/arm/elf.h    1999-05-31 10:21:53.000000000 +0200
  7262. +++ gcc-2.95.3/gcc/config/arm/elf.h    2003-12-02 17:50:55.000000000 +0100
  7263. @@ -172,9 +172,10 @@
  7264.     command line option -mstructure_size_boundary=<n> can be used to change this
  7265.     value.  */
  7266.  #undef  STRUCTURE_SIZE_BOUNDARY
  7267. -#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary
  7268. +/*#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary*/
  7269. +#define STRUCTURE_SIZE_BOUNDARY 32
  7270.  
  7271. -extern int arm_structure_size_boundary;
  7272. +/*extern int arm_structure_size_boundary;*/
  7273.  
  7274.  /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
  7275.     is a valid machine specific attribute for DECL.
  7276. diff -urNEBb gcc-2.95.3-orig/gcc/config/arm/tcoff.h gcc-2.95.3/gcc/config/arm/tcoff.h
  7277. --- gcc-2.95.3-orig/gcc/config/arm/tcoff.h    1998-12-16 22:01:58.000000000 +0100
  7278. +++ gcc-2.95.3/gcc/config/arm/tcoff.h    2003-12-02 17:50:55.000000000 +0100
  7279. @@ -33,9 +33,10 @@
  7280.     command line option -mstructure_size_boundary=<n> can be used to change this
  7281.     value.  */
  7282.  #undef STRUCTURE_SIZE_BOUNDARY
  7283. -#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary
  7284. +/*#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary*/
  7285. +#define STRUCTURE_SIZE_BOUNDARY 32
  7286.  
  7287. -extern int arm_structure_size_boundary;
  7288. +/*extern int arm_structure_size_boundary;*/
  7289.  
  7290.  /* This is COFF, but prefer stabs.  */
  7291.  #define SDB_DEBUGGING_INFO
  7292. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/amigaos.c gcc-2.95.3/gcc/config/m68k/amigaos.c
  7293. --- gcc-2.95.3-orig/gcc/config/m68k/amigaos.c    1970-01-01 01:00:00.000000000 +0100
  7294. +++ gcc-2.95.3/gcc/config/m68k/amigaos.c    2003-12-02 17:50:55.000000000 +0100
  7295. @@ -0,0 +1,419 @@
  7296. +/* Configuration for GNU C-compiler for m68k Amiga, running AmigaOS.
  7297. +   Copyright (C) 1992, 93-96, 1997 Free Software Foundation, Inc.
  7298. +   Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  7299. +   Heavily modified by Kamil Iskra (iskra@student.uci.agh.edu.pl).
  7300. +
  7301. +This file is part of GNU CC.
  7302. +
  7303. +GNU CC is free software; you can redistribute it and/or modify
  7304. +it under the terms of the GNU General Public License as published by
  7305. +the Free Software Foundation; either version 2, or (at your option)
  7306. +any later version.
  7307. +
  7308. +GNU CC is distributed in the hope that it will be useful,
  7309. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  7310. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  7311. +GNU General Public License for more details.
  7312. +
  7313. +You should have received a copy of the GNU General Public License
  7314. +along with GNU CC; see the file COPYING.  If not, write to
  7315. +the Free Software Foundation, 59 Temple Place - Suite 330,
  7316. +Boston, MA 02111-1307, USA.  */
  7317. +
  7318. +#include "config.h"
  7319. +#include "system.h"
  7320. +#include "rtl.h"
  7321. +#include "output.h"
  7322. +#include "tree.h"
  7323. +#include "flags.h"
  7324. +#include "expr.h"
  7325. +
  7326. +/* Baserel support.  */
  7327. +
  7328. +/* Does operand (which is a symbolic_operand) live in text space? If
  7329. +   so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.
  7330. +
  7331. +   This function is used in base relative code generation. */
  7332. +
  7333. +int
  7334. +read_only_operand (operand)
  7335. +     rtx operand;
  7336. +{
  7337. +  if (GET_CODE (operand) == CONST)
  7338. +    operand = XEXP (XEXP (operand, 0), 0);
  7339. +  if (GET_CODE (operand) == SYMBOL_REF)
  7340. +    return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand);
  7341. +  return 1;
  7342. +}
  7343. +
  7344. +/* This function is used while generating a base relative code.
  7345. +   It returns 1 if a decl is not relocatable, i. e., if it can be put
  7346. +   in the text section.
  7347. +   Currently, it's very primitive: it just checks if the object size
  7348. +   is less than 4 bytes (i. e., if it can hold a pointer).  It also
  7349. +   supports arrays and floating point types.  */
  7350. +
  7351. +int
  7352. +amigaos_put_in_text (decl)
  7353. +     tree decl;
  7354. +{
  7355. +  tree type = TREE_TYPE (decl);
  7356. +  if (TREE_CODE (type) == ARRAY_TYPE)
  7357. +    type = TREE_TYPE (type);
  7358. +  return (TREE_INT_CST_HIGH (TYPE_SIZE (type)) == 0
  7359. +      && TREE_INT_CST_LOW (TYPE_SIZE (type)) < 32)
  7360. +     || FLOAT_TYPE_P (type);
  7361. +}
  7362. +
  7363. +/* Common routine used to check if a4 should be preserved/restored.  */
  7364. +
  7365. +int
  7366. +amigaos_restore_a4 ()
  7367. +{
  7368. +  return (flag_pic >= 3 &&
  7369. +      (TARGET_RESTORE_A4 || TARGET_ALWAYS_RESTORE_A4
  7370. +       || lookup_attribute ("saveds",
  7371. +                TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)))));
  7372. +}
  7373. +
  7374. +void
  7375. +amigaos_alternate_pic_setup (stream)
  7376. +     FILE *stream;
  7377. +{
  7378. +  if (TARGET_RESTORE_A4 || TARGET_ALWAYS_RESTORE_A4)
  7379. +    asm_fprintf (stream, "\tjbsr %U__restore_a4\n");
  7380. +  else if (lookup_attribute ("saveds",
  7381. +                 TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))))
  7382. +    asm_fprintf (stream, "\tlea %U__a4_init,%Ra4\n");
  7383. +}
  7384. +
  7385. +/* Attributes support.  */
  7386. +
  7387. +#define AMIGA_CHIP_SECTION_NAME ".datachip"
  7388. +
  7389. +/* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine
  7390. +   specific attribute for DECL.  The attributes in ATTRIBUTES have previously
  7391. +   been assigned to DECL. */
  7392. +
  7393. +int
  7394. +valid_amigaos_decl_attribute (decl, identifier)
  7395. +     tree decl, identifier;
  7396. +{
  7397. +  if (TREE_CODE (decl) == VAR_DECL)
  7398. +    if (is_attribute_p ("chip", identifier))
  7399. +#ifdef ASM_OUTPUT_SECTION_NAME
  7400. +      {
  7401. +    if (! TREE_STATIC (decl) && ! DECL_EXTERNAL (decl))
  7402. +      error ("`chip' attribute cannot be specified for local variables");
  7403. +    else
  7404. +      {
  7405. +        /* The decl may have already been given a section attribute from
  7406. +           a previous declaration.  Ensure they match.  */
  7407. +        if (DECL_SECTION_NAME (decl) == NULL_TREE)
  7408. +          DECL_SECTION_NAME (decl) =
  7409. +        build_string (strlen (AMIGA_CHIP_SECTION_NAME) + 1,
  7410. +                  AMIGA_CHIP_SECTION_NAME);
  7411. +        else if (strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
  7412. +                 AMIGA_CHIP_SECTION_NAME) != 0)
  7413. +          {
  7414. +        error_with_decl (decl,
  7415. +            "`chip' for `%s' conflicts with previous declaration");
  7416. +        return 0;
  7417. +          }
  7418. +        return 1;
  7419. +      }
  7420. +      }
  7421. +#else
  7422. +      error ("`chip' attribute is not supported for this target");
  7423. +#endif
  7424. +
  7425. +  return 0;
  7426. +}
  7427. +
  7428. +/* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine
  7429. +   specific attribute for TYPE.  The attributes in ATTRIBUTES have previously
  7430. +   been assigned to TYPE.  */
  7431. +
  7432. +int
  7433. +valid_amigaos_type_attribute (type, attributes, identifier, args)
  7434. +     tree type, attributes, identifier, args;
  7435. +{
  7436. +  if (valid_m68k_type_attribute (type, attributes, identifier, args))
  7437. +    return 1;
  7438. +  else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
  7439. +    {
  7440. +      if (is_attribute_p ("stackext", identifier))
  7441. +    {
  7442. +      if (lookup_attribute ("interrupt", attributes))
  7443. +        {
  7444. +          error ("`stackext' and `interrupt' are mutually exclusive");
  7445. +          return 0;
  7446. +        }
  7447. +      return 1;
  7448. +    }
  7449. +      if (is_attribute_p ("interrupt", identifier))
  7450. +    {
  7451. +      if (lookup_attribute ("stackext", attributes))
  7452. +        {
  7453. +          error ("`stackext' and `interrupt' are mutually exclusive");
  7454. +          return 0;
  7455. +        }
  7456. +      return 1;
  7457. +    }
  7458. +      if (is_attribute_p ("saveds", identifier))
  7459. +    return 1;
  7460. +    }
  7461. +
  7462. +  return 0;
  7463. +}
  7464. +
  7465. +/* Stack checking and automatic extension support.  */
  7466. +
  7467. +void
  7468. +amigaos_prologue_begin_hook (stream, fsize)
  7469. +     FILE *stream;
  7470. +     int fsize;
  7471. +{
  7472. +  if (TARGET_STACKCHECK)
  7473. +    {
  7474. +      if (fsize < 256)
  7475. +    asm_fprintf (stream, "\tcmpl %s,%Rsp\n"
  7476. +                 "\tjcc 0f\n"
  7477. +                 "\tjra %U__stkovf\n"
  7478. +                 "\t0:\n",
  7479. +             (flag_pic == 3 ? "a4@(___stk_limit:W)" :
  7480. +                      (flag_pic == 4 ? "a4@(___stk_limit:L)" :
  7481. +                               "___stk_limit")));
  7482. +      else if (fsize < 0x8000)
  7483. +    asm_fprintf (stream, "\tmovel #%d:W,%Rd0\n\tjbsr %U__stkchk_d0\n",
  7484. +             fsize);
  7485. +      else
  7486. +    asm_fprintf (stream, "\tmovel #%d,%Rd0\n\tjbsr %U__stkchk_d0\n",
  7487. +             fsize);
  7488. +    }
  7489. +}
  7490. +
  7491. +void
  7492. +amigaos_alternate_frame_setup_f (stream, fsize)
  7493. +     FILE *stream;
  7494. +     int fsize;
  7495. +{
  7496. +  if (fsize < 128)
  7497. +    asm_fprintf (stream, "\tcmpl %s,%Rsp\n"
  7498. +             "\tjcc 0f\n"
  7499. +             "\tmoveq #%d,%Rd0\n"
  7500. +             "\tmoveq #0,%Rd1\n"
  7501. +             "\tjbsr %U__stkext_f\n"
  7502. +             "0:\tlink %Ra5,#%d:W\n",
  7503. +         (flag_pic == 3 ? "a4@(___stk_limit:W)" :
  7504. +                  (flag_pic == 4 ? "a4@(___stk_limit:L)" :
  7505. +                           "___stk_limit")),
  7506. +         fsize, -fsize);
  7507. +  else if (fsize < 0x8000)
  7508. +    asm_fprintf (stream, "\tmovel #%d:W,%Rd0\n\tjbsr %U__link_a5_d0_f\n",
  7509. +         fsize);
  7510. +  else
  7511. +    asm_fprintf (stream, "\tmovel #%d,%Rd0\n\tjbsr %U__link_a5_d0_f\n",
  7512. +         fsize);
  7513. +}
  7514. +
  7515. +void
  7516. +amigaos_alternate_frame_setup (stream, fsize)
  7517. +     FILE *stream;
  7518. +     int fsize;
  7519. +{
  7520. +  if (! fsize)
  7521. +    asm_fprintf (stream, "\tcmpl %s,%Rsp\n"
  7522. +             "\tjcc 0f\n"
  7523. +             "\tmoveq #0,%Rd0\n"
  7524. +             "\tmoveq #0,%Rd1\n"
  7525. +             "\tjbsr %U__stkext_f\n"
  7526. +             "0:\n",
  7527. +         (flag_pic == 3 ? "a4@(___stk_limit:W)" :
  7528. +                  (flag_pic == 4 ? "a4@(___stk_limit:L)" :
  7529. +                           "___stk_limit")));
  7530. +  else if (fsize + 4 < 128)
  7531. +    asm_fprintf (stream, "\tcmpl %s,%Rsp\n"
  7532. +             "\tjcc 0f\n"
  7533. +             "\tmoveq #%d,%Rd0\n"
  7534. +             "\tmoveq #0,%Rd1\n"
  7535. +             "\tjbsr %U__stkext_f\n"
  7536. +             "0:\taddw #%d,%Rsp\n",
  7537. +         (flag_pic == 3 ? "a4@(___stk_limit:W)" :
  7538. +                  (flag_pic == 4 ? "a4@(___stk_limit:L)" :
  7539. +                           "___stk_limit")),
  7540. +         fsize + 4, -(fsize + 4));
  7541. +  else if (fsize + 4 < 0x8000)
  7542. +    asm_fprintf (stream, "\tmovel #%d:W,%Rd0\n\tjbsr %U__sub_d0_sp_f\n",
  7543. +         fsize + 4);
  7544. +  else
  7545. +    asm_fprintf (stream, "\tmovel %0I%d,%Rd0\n\tjbsr %U__sub_d0_sp_f\n",
  7546. +         fsize + 4);
  7547. +}
  7548. +
  7549. +static rtx
  7550. +gen_stack_management_call (stack_pointer, arg, func)
  7551. +     rtx stack_pointer;
  7552. +     rtx arg;
  7553. +     char *func;
  7554. +{
  7555. +  rtx call_insn, call, seq, name;
  7556. +  start_sequence ();
  7557. +
  7558. +  /* Move arg to d0.  */
  7559. +  emit_move_insn (gen_rtx (REG, SImode, 0), arg);
  7560. +
  7561. +  /* Generate the function reference.  */
  7562. +  name = gen_rtx (SYMBOL_REF, Pmode, func);
  7563. +  SYMBOL_REF_FLAG (name) = 1;
  7564. +  /* If optimizing, put it in a psedo so that several loads can be merged
  7565. +     into one.  */
  7566. +  if (optimize && ! flag_no_function_cse)
  7567. +    name = copy_to_reg (name);
  7568. +
  7569. +  /* Generate the function call.  */
  7570. +  call = gen_rtx (CALL, VOIDmode, gen_rtx (MEM, FUNCTION_MODE, name),
  7571. +          const0_rtx);
  7572. +  /* If we are doing stack extension, notify about the sp change.  */
  7573. +  if (stack_pointer)
  7574. +    call = gen_rtx (SET, VOIDmode, stack_pointer, call);
  7575. +
  7576. +  /* Generate the call instruction.  */
  7577. +  call_insn = emit_call_insn (call);
  7578. +  /* Stack extension does not change memory in an unpredictable way.  */
  7579. +  CONST_CALL_P (call_insn) = 1;
  7580. +  /* We pass an argument in d0.  */
  7581. +  CALL_INSN_FUNCTION_USAGE (call_insn) = gen_rtx (EXPR_LIST, VOIDmode,
  7582. +    gen_rtx (USE, VOIDmode, gen_rtx (REG, SImode, 0)), 0);
  7583. +
  7584. +  seq = gen_sequence ();
  7585. +  end_sequence ();
  7586. +  return seq;
  7587. +}
  7588. +
  7589. +rtx
  7590. +gen_stack_cleanup_call (stack_pointer, sa)
  7591. +     rtx stack_pointer;
  7592. +     rtx sa;
  7593. +{
  7594. +  return gen_stack_management_call (stack_pointer, sa, "__move_d0_sp");
  7595. +}
  7596. +
  7597. +void
  7598. +amigaos_alternate_allocate_stack (operands)
  7599. +     rtx *operands;
  7600. +{
  7601. +  if (TARGET_STACKEXTEND)
  7602. +    emit_insn ((rtx)gen_stack_management_call (stack_pointer_rtx, operands[1],
  7603. +                           "__sub_d0_sp"));
  7604. +  else
  7605. +    {
  7606. +      if (TARGET_STACKCHECK)
  7607. +    emit_insn ((rtx)gen_stack_management_call (0, operands[1],
  7608. +                           "__stkchk_d0"));
  7609. +      anti_adjust_stack (operands[1]);
  7610. +    }
  7611. +  emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
  7612. +}
  7613. +
  7614. +/* begin-GG-local: explicit register specification for parameters */
  7615. +
  7616. +/* Initialize a variable CUM of type CUMULATIVE_ARGS
  7617. +   for a call to a function whose data type is FNTYPE.
  7618. +   For a library call, FNTYPE is 0.  */
  7619. +
  7620. +void
  7621. +amigaos_init_cumulative_args(CUMULATIVE_ARGS *cum, tree fntype)
  7622. +{
  7623. +  m68k_init_cumulative_args(cum, fntype);
  7624. +
  7625. +  if (fntype)
  7626. +    cum->formal_type=TYPE_ARG_TYPES(fntype);
  7627. +  else /* Call to compiler-support function. */
  7628. +    cum->formal_type=0;
  7629. +}
  7630. +
  7631. +/* Update the data in CUM to advance over an argument.  */
  7632. +
  7633. +void
  7634. +amigaos_function_arg_advance(CUMULATIVE_ARGS *cum)
  7635. +{
  7636. +  m68k_function_arg_advance(cum);
  7637. +
  7638. +  if (cum->formal_type)
  7639. +    cum->formal_type=TREE_CHAIN((tree)cum->formal_type);
  7640. +}
  7641. +
  7642. +/* A C expression that controls whether a function argument is passed
  7643. +   in a register, and which register. */
  7644. +
  7645. +struct rtx_def *
  7646. +amigaos_function_arg(CUMULATIVE_ARGS *cum, enum machine_mode mode,
  7647. +  tree type)
  7648. +{
  7649. +  tree asmtree;
  7650. +  if (cum->formal_type && TREE_VALUE((tree)cum->formal_type)
  7651. +      && (asmtree=lookup_attribute("asm",
  7652. +            TYPE_ATTRIBUTES(TREE_VALUE((tree)cum->formal_type)))))
  7653. +    {
  7654. +      int i;
  7655. +#if 0
  7656. +      /* See c-decl.c/push_parm_decl for an explanation why this doesn't work.
  7657. +       */
  7658. +      cum->last_arg_reg=TREE_INT_CST_LOW(TREE_VALUE(TREE_VALUE(asmtree)));
  7659. +#else
  7660. +      cum->last_arg_reg=TREE_INT_CST_LOW(TREE_VALUE(asmtree));
  7661. +#endif
  7662. +      cum->last_arg_len=HARD_REGNO_NREGS(cum->last_arg_reg, mode);
  7663. +
  7664. +      for (i=0; i<cum->last_arg_len; i++)
  7665. +    if (cum->regs_already_used & (1 << cum->last_arg_reg+i))
  7666. +      {
  7667. +        error("two parameters allocated for one register");
  7668. +        break;
  7669. +      }
  7670. +      return gen_rtx(REG, mode, cum->last_arg_reg);
  7671. +    }
  7672. +  else
  7673. +    return (struct rtx_def *)m68k_function_arg(cum, mode, type);
  7674. +}
  7675. +
  7676. +/* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
  7677. +   one if they are compatible, and two if they are nearly compatible
  7678. +   (which causes a warning to be generated). */
  7679. +
  7680. +int
  7681. +comp_amigaos_type_attributes(tree type1, tree type2)
  7682. +{
  7683. +  int ret;
  7684. +  if ((ret=comp_m68k_type_attributes(type1, type2))!=1)
  7685. +    return ret;
  7686. +
  7687. +  /* Functions or methods are incompatible if they specify mutually exclusive
  7688. +     ways of passing arguments. */
  7689. +  if (TREE_CODE(type1)==FUNCTION_TYPE || TREE_CODE(type1)==METHOD_TYPE)
  7690. +    {
  7691. +      tree arg1, arg2;
  7692. +      arg1=TYPE_ARG_TYPES(type1);
  7693. +      arg2=TYPE_ARG_TYPES(type2);
  7694. +      for (; arg1 && arg2; arg1=TREE_CHAIN(arg1), arg2=TREE_CHAIN(arg2))
  7695. +    if (TREE_VALUE(arg1) && TREE_VALUE(arg2))
  7696. +      {
  7697. +        tree asm1, asm2;
  7698. +        asm1=lookup_attribute("asm", TYPE_ATTRIBUTES(TREE_VALUE(arg1)));
  7699. +        asm2=lookup_attribute("asm", TYPE_ATTRIBUTES(TREE_VALUE(arg2)));
  7700. +        if (asm1 && asm2)
  7701. +          {
  7702. +        if (TREE_INT_CST_LOW(TREE_VALUE(asm1))!=
  7703. +            TREE_INT_CST_LOW(TREE_VALUE(asm2)))
  7704. +          return 0; /* Two different registers specified. */
  7705. +          }
  7706. +        else
  7707. +          if (asm1 || asm2)
  7708. +        return 0; /* "asm" used in only one type. */
  7709. +      }
  7710. +    }
  7711. +  return 1;
  7712. +}
  7713. +
  7714. +/* end-GG-local */
  7715. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/amigaos.h gcc-2.95.3/gcc/config/m68k/amigaos.h
  7716. --- gcc-2.95.3-orig/gcc/config/m68k/amigaos.h    1970-01-01 01:00:00.000000000 +0100
  7717. +++ gcc-2.95.3/gcc/config/m68k/amigaos.h    2003-12-02 17:50:55.000000000 +0100
  7718. @@ -0,0 +1,624 @@
  7719. +/* Configuration for GNU C-compiler for m68k Amiga, running AmigaOS.
  7720. +   Copyright (C) 1992, 93-97, 1998 Free Software Foundation, Inc.
  7721. +   Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  7722. +   Heavily modified by Kamil Iskra (iskra@student.uci.agh.edu.pl).
  7723. +
  7724. +This file is part of GNU CC.
  7725. +
  7726. +GNU CC is free software; you can redistribute it and/or modify
  7727. +it under the terms of the GNU General Public License as published by
  7728. +the Free Software Foundation; either version 2, or (at your option)
  7729. +any later version.
  7730. +
  7731. +GNU CC is distributed in the hope that it will be useful,
  7732. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  7733. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  7734. +GNU General Public License for more details.
  7735. +
  7736. +You should have received a copy of the GNU General Public License
  7737. +along with GNU CC; see the file COPYING.  If not, write to
  7738. +the Free Software Foundation, 59 Temple Place - Suite 330,
  7739. +Boston, MA 02111-1307, USA.  */
  7740. +
  7741. +#include "m68k/m68k.h"
  7742. +
  7743. +/* begin-GG-local: explicit register specification for parameters */
  7744. +#define TARGET_AMIGAOS
  7745. +/* end-GG-local */
  7746. +
  7747. +/* Specs, switches.  */
  7748. +
  7749. +/* See m68k.h for bits in TARGET_DEFAULT.
  7750. +   0 means 68000, no hardware fpu (68881/68882/68040/68060).  */
  7751. +
  7752. +#define TARGET_DEFAULT 0
  7753. +
  7754. +/* Define __HAVE_68881__ in preprocessor according to the -m flags.
  7755. +   This will control the use of inline 68881 insns in certain macros.
  7756. +   Also inform the program which CPU we compile for.
  7757. +   When creating shared libraries, use different 'errno'.  */
  7758. +
  7759. +/* -msoft-float is the default, assume -mc68000 as well */
  7760. +#define CPP_SPEC                            \
  7761. +  "%{m68881:-D__HAVE_68881__} "                        \
  7762. +  "%{!ansi:"                                \
  7763. +    "%{m68020:-Dmc68020} "                        \
  7764. +    "%{mc68020:-Dmc68020} "                        \
  7765. +    "%{m68020-40:-Dmc68020} "                        \
  7766. +    "%{m68020-60:-Dmc68020} "                        \
  7767. +    "%{m68030:-Dmc68030} "                        \
  7768. +    "%{m68040:-Dmc68040} "                        \
  7769. +    "%{m68060:-Dmc68060}} "                        \
  7770. +  "%{m68020:-D__mc68020__ -D__mc68020} "                \
  7771. +  "%{mc68020:-D__mc68020__ -D__mc68020} "                \
  7772. +  "%{m68020-40:-D__mc68020__ -D__mc68020} "                \
  7773. +  "%{m68020-60:-D__mc68020__ -D__mc68020} "                \
  7774. +  "%{m68030:-D__mc68030__ -D__mc68030} "                \
  7775. +  "%{m68040:-D__mc68040__ -D__mc68040} "                \
  7776. +  "%{m68060:-D__mc68060__ -D__mc68060} "
  7777. +
  7778. +/* Various -m flags require special flags to the assembler.  */
  7779. +
  7780. +#define ASM_SPEC "\
  7781. + %{m68000:-mc68010}\
  7782. + %{mc68000:-mc68010}\
  7783. + %{m68020:-mc68020}\
  7784. + %{mc68020:-mc68020}\
  7785. + %{m68030:-mc68030}\
  7786. + %{m68040:-mc68040}\
  7787. + %{m68060:-mc68060}\
  7788. + %{m68020-40:-mc68020}\
  7789. + %{m68020-60:-mc68020}\
  7790. + %{!mc68000:%{!m68000:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68060:%{!m68020-40:%{!m68020-60:-mc68010}}}}}}}}}\
  7791. + %{msmall-code:-sc}\
  7792. +"
  7793. +
  7794. +/* amiga/amigaos are the new "standard" defines for the Amiga.
  7795. + * MCH_AMIGA, AMIGA, __chip etc. are used in other compilers and are
  7796. + * provided for compatibility reasons.  */
  7797. +
  7798. +#define CPP_PREDEFINES "\
  7799. + -Dmc68000\
  7800. + -Damiga\
  7801. + -Damigaos\
  7802. + -DMCH_AMIGA\
  7803. + -DAMIGA\
  7804. + -D__chip=__attribute__((__chip__))\
  7805. + -D__saveds=__attribute__((__saveds__))\
  7806. + -D__interrupt=__attribute__((__interrupt__))\
  7807. + -D__stackext=__attribute__((__stackext__))\
  7808. + -D__regargs=__attribute__((__regparm__))\
  7809. + -D__stdargs=__attribute__((__stkparm__))\
  7810. + -D__aligned=__attribute__((__aligned__(4)))\
  7811. + -Asystem(amigaos)\
  7812. + -Acpu(m68k)\
  7813. + -Amachine(m68k)\
  7814. +"
  7815. +
  7816. +/* Choose the right startup file, depending on whether we use base relative
  7817. +   code, base relative code with automatic relocation (-resident), their
  7818. +   32-bit versions, libnix, profiling or plain crt0.o.  */
  7819. +
  7820. +#define STARTFILE_SPEC            \
  7821. +  "%{resident32:nr32crt0.o%s}"        \
  7822. +  "%{!resident32:"            \
  7823. +    "%{fbaserel32:nb32crt0.o%s}"    \
  7824. +    "%{!fbaserel32:"            \
  7825. +      "%{resident:nrcrt0.o%s}"        \
  7826. +      "%{!resident:"            \
  7827. +        "%{fbaserel:nbcrt0.o%s}"    \
  7828. +        "%{!fbaserel:ncrt0.o%s}}}} "
  7829. +
  7830. +#define ENDFILE_SPEC ""
  7831. +
  7832. +/* Automatically search libamiga.a for AmigaOS specific functions.  Note
  7833. +   that we first search the standard C library to resolve as much as
  7834. +   possible from there, since it has names that are duplicated in libamiga.a
  7835. +   which we *don't* want from there.  Then search libamiga.a for any calls
  7836. +   that were not generated inline, and finally search the standard C library
  7837. +   again to resolve any references that libamiga.a might have generated.
  7838. +   This may only be a temporary solution since it might be better to simply
  7839. +   remove the things from libamiga.a that should be pulled in from libc.a
  7840. +   instead, which would eliminate the first reference to libc.a.  Note that
  7841. +   if we don't search it automatically, it is very easy for the user to try
  7842. +   to put in a -lamiga himself and get it in the wrong place, so that (for
  7843. +   example) calls like sprintf come from -lamiga rather than -lc. */
  7844. +
  7845. +#define LIB_SPEC    \
  7846. +  "%{mstackextend:-lstack} -lc -lamiga -ldebug -lgcc "
  7847. +
  7848. +/* If debugging, tell the linker to output amiga-hunk symbols *and* a BSD
  7849. +   compatible debug hunk.
  7850. +   Also, pass appropriate linker flavours depending on user-supplied
  7851. +   commandline options.  */
  7852. +
  7853. +#define LINK_SPEC                            \
  7854. +  "%{fbaserel:%{!resident:-m amiga_bss -fl libb}} "            \
  7855. +  "%{resident:-m amiga_bss -amiga-datadata-reloc -fl libb} "        \
  7856. +  "%{fbaserel32:%{!resident32:-m amiga_bss -fl libb32}} "        \
  7857. +  "%{resident32:-m amiga_bss -amiga-datadata-reloc -fl libb32} "    \
  7858. +  "%{g:-amiga-debug-hunk} "                        \
  7859. +  "%{m68020:-fl libm020} "                        \
  7860. +  "%{mc68020:-fl libm020} "                        \
  7861. +  "%{m68030:-fl libm020} "                        \
  7862. +  "%{m68040:-fl libm020} "                        \
  7863. +  "%{m68060:-fl libm020} "                        \
  7864. +  "%{m68020-40:-fl libm020} "                        \
  7865. +  "%{m68020-60:-fl libm020} "                        \
  7866. +  "%{m68881:-fl libm881} "
  7867. +
  7868. +/* Translate '-resident' to '-fbaserel' (they differ in linking stage only).
  7869. +   Don't put function addresses in registers for PC-relative code.  */
  7870. +
  7871. +#define CC1_SPEC                            \
  7872. +  "%{resident:-fbaserel} "                        \
  7873. +  "%{resident32:-fbaserel32} "                        \
  7874. +  "%{msmall-code:-fno-function-cse} "
  7875. +
  7876. +/* Compile with stack extension.  */
  7877. +
  7878. +#define MASK_STACKEXTEND 0x40000000
  7879. +#define TARGET_STACKEXTEND (((target_flags & MASK_STACKEXTEND)        \
  7880. +  && !lookup_attribute ("interrupt",                    \
  7881. +            TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)))) \
  7882. +  || lookup_attribute ("stackext",                    \
  7883. +               TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))))
  7884. +
  7885. +/* Compile with stack checking.  */
  7886. +
  7887. +#define MASK_STACKCHECK 0x20000000
  7888. +#define TARGET_STACKCHECK ((target_flags & MASK_STACKCHECK)        \
  7889. +  && !(target_flags & MASK_STACKEXTEND)                    \
  7890. +  && !lookup_attribute ("interrupt",                    \
  7891. +            TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))) \
  7892. +  && !lookup_attribute ("stackext",                    \
  7893. +            TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))))
  7894. +
  7895. +/* Compile with a4 restoring in public functions.  */
  7896. +
  7897. +#define MASK_RESTORE_A4 0x10000000
  7898. +#define TARGET_RESTORE_A4                        \
  7899. +  ((target_flags & MASK_RESTORE_A4) && TREE_PUBLIC (current_function_decl))
  7900. +
  7901. +/* Compile with a4 restoring in all functions.  */
  7902. +
  7903. +#define MASK_ALWAYS_RESTORE_A4 0x8000000
  7904. +#define TARGET_ALWAYS_RESTORE_A4 (target_flags & MASK_ALWAYS_RESTORE_A4)
  7905. +
  7906. +/* Provide a dummy entry for the '-msmall-code' switch.  This is used by
  7907. +   the assembler and '*_SPEC'.  */
  7908. +
  7909. +#undef SUBTARGET_SWITCHES
  7910. +#define SUBTARGET_SWITCHES                        \
  7911. +    { "small-code", 0},                            \
  7912. +    { "stackcheck", MASK_STACKCHECK},                    \
  7913. +    { "no-stackcheck", - MASK_STACKCHECK},                \
  7914. +    { "stackextend", MASK_STACKEXTEND},                    \
  7915. +    { "no-stackextend", - MASK_STACKEXTEND},                \
  7916. +    { "fixedstack", - (MASK_STACKCHECK|MASK_STACKEXTEND)},        \
  7917. +    { "restore-a4", MASK_RESTORE_A4},                    \
  7918. +    { "no-restore-a4", - MASK_RESTORE_A4},                \
  7919. +    { "always-restore-a4", MASK_ALWAYS_RESTORE_A4},            \
  7920. +    { "no-always-restore-a4", - MASK_ALWAYS_RESTORE_A4},
  7921. +
  7922. +#undef SUBTARGET_OVERRIDE_OPTIONS
  7923. +#define SUBTARGET_OVERRIDE_OPTIONS                    \
  7924. +do                                    \
  7925. +  {                                    \
  7926. +    if (!TARGET_68020 && flag_pic==4)                    \
  7927. +      error ("-fbaserel32 is not supported on the 68000 or 68010\n");    \
  7928. +  }                                    \
  7929. +while (0)
  7930. +
  7931. +/* Various ABI issues.  */
  7932. +
  7933. +/* This is (almost;-) BSD, so it wants DBX format.  */
  7934. +
  7935. +#define DBX_DEBUGGING_INFO
  7936. +
  7937. +/* GDB goes mad if it sees the function end marker.  */
  7938. +
  7939. +#define NO_DBX_FUNCTION_END 1
  7940. +
  7941. +/* Allow folding division by zero.  */
  7942. +
  7943. +#define REAL_INFINITY
  7944. +
  7945. +/* Don't try using XFmode since we don't have appropriate runtime software
  7946. +   support.  */
  7947. +#undef LONG_DOUBLE_TYPE_SIZE
  7948. +#define LONG_DOUBLE_TYPE_SIZE 64
  7949. +
  7950. +/* Use A5 as framepointer instead of A6, since the AmigaOS ABI requires A6
  7951. +   to be used as a shared library base pointer in direct library calls.  */
  7952. +
  7953. +#undef FRAME_POINTER_REGNUM
  7954. +#define FRAME_POINTER_REGNUM 13
  7955. +#undef ARG_POINTER_REGNUM
  7956. +#define ARG_POINTER_REGNUM 13
  7957. +
  7958. +/* We use A4 for the PIC pointer, not A5, which is the framepointer.  */
  7959. +
  7960. +#undef PIC_OFFSET_TABLE_REGNUM
  7961. +#define PIC_OFFSET_TABLE_REGNUM 12
  7962. +
  7963. +/* The AmigaOS ABI does not define how structures should be returned, so,
  7964. +   contrary to 'm68k.h', we prefer a multithread-safe solution.  */
  7965. +
  7966. +#undef PCC_STATIC_STRUCT_RETURN
  7967. +
  7968. +/* Setup a default shell return value for those (gazillion..) programs that
  7969. +   (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
  7970. +   cause the shell to randomly caugh upon executing such programs (contrary
  7971. +   to Unix, AmigaOS scripts are terminated with an error if a program returns
  7972. +   with an error code above the `error' or even `failure' level
  7973. +   (which is configurable with the FAILAT command)).  */
  7974. +
  7975. +#define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
  7976. +
  7977. +#undef WCHAR_TYPE
  7978. +#define WCHAR_TYPE "unsigned int"
  7979. +
  7980. +/* Support sections in chip memory, currently '.datachip' only.  */
  7981. +#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC)        \
  7982. +  fprintf ((FILE), "\t%s\n", (NAME))
  7983. +
  7984. +/* We define ASM_OUTPUT_SECTON_NAME, but we don't support arbitrary sections,
  7985. +   including '.gcc_except_table', so we emulate the standard behaviour.  */
  7986. +#define EXCEPTION_SECTION()                        \
  7987. +do                                    \
  7988. +  {                                    \
  7989. +    if (flag_pic)                            \
  7990. +      data_section ();                            \
  7991. +    else                                \
  7992. +      readonly_data_section ();                        \
  7993. +  }                                    \
  7994. +while(0)
  7995. +
  7996. +#define EH_FRAME_SECTION() readonly_data_section ()
  7997. +
  7998. +/* Use sjlj exceptions until problems with DWARF2 unwind info on a.out
  7999. +   targets using GNU ld are fixed.  */
  8000. +#define DWARF2_UNWIND_INFO    0
  8001. +
  8002. +/* GAS supports alignment up to 32768 bytes.  */
  8003. +#undef ASM_OUTPUT_ALIGN
  8004. +#define ASM_OUTPUT_ALIGN(FILE, LOG)                    \
  8005. +do                                    \
  8006. +  {                                    \
  8007. +    if ((LOG) == 1)                            \
  8008. +      fprintf ((FILE), "\t.even\n");                    \
  8009. +    else                                \
  8010. +      fprintf ((FILE), "\t.align %d\n", (LOG));                \
  8011. +  }                                    \
  8012. +while (0)
  8013. +
  8014. +#define MAX_OFILE_ALIGNMENT ((1 << 15)*BITS_PER_UNIT)
  8015. +
  8016. +/* It is not uncommon to use a custom startup code on AmigaOS.  The OS
  8017. +   starts an application by jumping to the first byte of the text section,
  8018. +   so we prefer the constants to be put after the functions.  */
  8019. +/* FIXME: Disabled for now, it's buggy.  */
  8020. +
  8021. +/* #define CONSTANT_AFTER_FUNCTION_P(EXP) 1 */ /**/
  8022. +
  8023. +/* Call __flush_cache() after building the trampoline: it will call
  8024. +   an appropriate OS cache-clearing routine.  */
  8025. +
  8026. +#undef FINALIZE_TRAMPOLINE
  8027. +#define FINALIZE_TRAMPOLINE(TRAMP)                    \
  8028. +  emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__flush_cache"),    \
  8029. +             0, VOIDmode, 2, (TRAMP), Pmode,            \
  8030. +             GEN_INT (TRAMPOLINE_SIZE), SImode)
  8031. +
  8032. +/* Baserel support.  */
  8033. +
  8034. +/* Given that symbolic_operand(X), return TRUE if no special
  8035. +   base relative relocation is necessary */
  8036. +
  8037. +#define LEGITIMATE_BASEREL_OPERAND_P(X)                    \
  8038. +  (flag_pic >= 3 && read_only_operand (X))
  8039. +
  8040. +#undef LEGITIMATE_PIC_OPERAND_P
  8041. +#define LEGITIMATE_PIC_OPERAND_P(X)                    \
  8042. +  (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  8043. +
  8044. +/* Define this macro if references to a symbol must be treated
  8045. +   differently depending on something about the variable or
  8046. +   function named by the symbol (such as what section it is in).
  8047. +
  8048. +   The macro definition, if any, is executed immediately after the
  8049. +   rtl for DECL or other node is created.
  8050. +   The value of the rtl will be a `mem' whose address is a
  8051. +   `symbol_ref'.
  8052. +
  8053. +   The usual thing for this macro to do is to a flag in the
  8054. +   `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  8055. +   name string in the `symbol_ref' (if one bit is not enough
  8056. +   information).
  8057. +
  8058. +   On the Amiga we use this to indicate if references to a symbol should be
  8059. +   absolute or base relative.  */
  8060. +
  8061. +#define ENCODE_SECTION_INFO(DECL)                    \
  8062. +do                                    \
  8063. +  {                                    \
  8064. +    if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  8065. +      SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;            \
  8066. +    else                                \
  8067. +      {                                    \
  8068. +    rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  8069. +           ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  8070. +    if ((RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl)        \
  8071. +         && (flag_pic<3 || (TREE_CODE (DECL) == STRING_CST        \
  8072. +                && !flag_writable_strings)        \
  8073. +         || amigaos_put_in_text (DECL)))            \
  8074. +        || (TREE_CODE (DECL) == VAR_DECL                \
  8075. +        && DECL_SECTION_NAME (DECL) != NULL_TREE))        \
  8076. +      SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  8077. +      }                                    \
  8078. +  }                                    \
  8079. +while (0)
  8080. +
  8081. +#define LIBCALL_ENCODE_SECTION_INFO(FUN)                \
  8082. +do                                    \
  8083. +  {                                    \
  8084. +    if (flag_pic >= 3)                            \
  8085. +      SYMBOL_REF_FLAG (FUN) = 1;                    \
  8086. +  }                                    \
  8087. +while (0)
  8088. +
  8089. +/* according to varasm.c, RELOC referrs *only* to whether constants (!)
  8090. +   are addressed by address. */
  8091. +
  8092. +#undef SELECT_SECTION
  8093. +#define SELECT_SECTION(DECL, RELOC)                    \
  8094. +{                                    \
  8095. +  if (TREE_CODE (DECL) == STRING_CST)                    \
  8096. +    {                                    \
  8097. +      if (! flag_writable_strings)                    \
  8098. +    readonly_data_section ();                    \
  8099. +      else                                \
  8100. +    data_section ();                        \
  8101. +    }                                    \
  8102. +  else if (TREE_CODE (DECL) == VAR_DECL)                \
  8103. +    {                                    \
  8104. +      if (TREE_READONLY (DECL)                        \
  8105. +      && ! TREE_THIS_VOLATILE (DECL)                \
  8106. +      && DECL_INITIAL (DECL)                    \
  8107. +      && (DECL_INITIAL (DECL) == error_mark_node            \
  8108. +          || TREE_CONSTANT (DECL_INITIAL (DECL)))            \
  8109. +      && (!flag_pic || (flag_pic<3 && !RELOC)            \
  8110. +          || SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0))))        \
  8111. +    readonly_data_section ();                    \
  8112. +      else                                \
  8113. +    data_section ();                        \
  8114. +    }                                    \
  8115. +  else if ((!flag_pic || (flag_pic<3 && !RELOC))            \
  8116. +       && SYMBOL_REF_FLAG (XEXP ((TREE_CODE_CLASS (TREE_CODE (DECL))\
  8117. +        != 'd' ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)), 0)))    \
  8118. +    readonly_data_section ();                        \
  8119. +  else                                    \
  8120. +    data_section ();                            \
  8121. +}
  8122. +
  8123. +/* Preserve the initial value of a4.  */
  8124. +
  8125. +#define PROLOGUE_EXTRA_SAVE(MASK, NUM_SAVED_REGS)            \
  8126. +do                                    \
  8127. +  {                                    \
  8128. +    if (amigaos_restore_a4 ())                        \
  8129. +      {                                    \
  8130. +    (MASK) |= 1 << (15 - PIC_OFFSET_TABLE_REGNUM);            \
  8131. +    (NUM_SAVED_REGS)++;                        \
  8132. +      }                                    \
  8133. +  }                                    \
  8134. +while (0)
  8135. +
  8136. +/* Restore the initial value of a4.  */
  8137. +
  8138. +#define EPILOGUE_EXTRA_RESTORE(MASK, NREGS)                \
  8139. +do                                    \
  8140. +  {                                    \
  8141. +    if (amigaos_restore_a4 ())                        \
  8142. +      {                                    \
  8143. +    (MASK) |= 1 << PIC_OFFSET_TABLE_REGNUM;                \
  8144. +    (NREGS)++;                            \
  8145. +      }                                    \
  8146. +  }                                    \
  8147. +while (0)
  8148. +
  8149. +#define HAVE_ALTERNATE_PIC_SETUP (flag_pic >= 3)
  8150. +
  8151. +/* Make a4 point at data hunk.  */
  8152. +
  8153. +void amigaos_alternate_pic_setup ();
  8154. +#define ALTERNATE_PIC_SETUP(STREAM)                    \
  8155. +  (amigaos_alternate_pic_setup (STREAM))
  8156. +
  8157. +/* If preserving a4, let the code generator know about it.  */
  8158. +
  8159. +#undef SUBTARGET_INITIAL_FP_OFFSET
  8160. +#define SUBTARGET_INITIAL_FP_OFFSET(OFFSET)                \
  8161. +do                                    \
  8162. +  {                                    \
  8163. +    if (amigaos_restore_a4 ())                        \
  8164. +      (OFFSET) += 4;                            \
  8165. +  }                                    \
  8166. +while (0)
  8167. +
  8168. +/* Determine if the epilogue should be output as RTL.
  8169. +   Don't do it if preserving a4.  */
  8170. +
  8171. +#undef USE_RETURN_INSN
  8172. +#define USE_RETURN_INSN (use_return_insn () && ! amigaos_restore_a4 ())
  8173. +
  8174. +/* Attribute support.  */
  8175. +
  8176. +/* A C expression whose value is nonzero if IDENTIFIER with arguments
  8177. +   ARGS is a valid machine specific attribute for DECL.  The attributes
  8178. +   in ATTRIBUTES have previously been assigned to DECL.  */
  8179. +
  8180. +#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
  8181. +  (valid_amigaos_decl_attribute ((DECL), (IDENTIFIER)))
  8182. +
  8183. +/* A C expression whose value is nonzero if IDENTIFIER with arguments
  8184. +   ARGS is a valid machine specific attribute for TYPE.  The attributes
  8185. +   in ATTRIBUTES have previously been assigned to TYPE.  */
  8186. +
  8187. +#undef VALID_MACHINE_TYPE_ATTRIBUTE
  8188. +#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \
  8189. +  (valid_amigaos_type_attribute ((TYPE), (ATTRIBUTES), (IDENTIFIER), (ARGS)))
  8190. +
  8191. +/* Generate the test of d0 before return to set cc register in 'interrupt'
  8192. +   function.  */
  8193. +
  8194. +#define EPILOGUE_END_HOOK(STREAM)                    \
  8195. +do                                    \
  8196. +  {                                    \
  8197. +    if (lookup_attribute ("interrupt",                    \
  8198. +              TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)))) \
  8199. +      asm_fprintf ((STREAM), "\ttstl %Rd0\n");                \
  8200. +  }                                    \
  8201. +while (0)
  8202. +
  8203. +/* begin-GG-local: explicit register specification for parameters */
  8204. +
  8205. +/* Note: this is an extension of m68k_args */
  8206. +struct amigaos_args
  8207. +{
  8208. +  int num_of_regs;
  8209. +  long regs_already_used;
  8210. +  int last_arg_reg;
  8211. +  int last_arg_len;
  8212. +  void *formal_type; /* New field: formal type of the current argument.  */
  8213. +};
  8214. +
  8215. +/* A C type for declaring a variable that is used as the first
  8216. +   argument of `FUNCTION_ARG' and other related values.  */
  8217. +
  8218. +#undef CUMULATIVE_ARGS
  8219. +#define CUMULATIVE_ARGS struct amigaos_args
  8220. +
  8221. +/* Initialize a variable CUM of type CUMULATIVE_ARGS
  8222. +   for a call to a function whose data type is FNTYPE.
  8223. +   For a library call, FNTYPE is 0.  */
  8224. +
  8225. +#undef INIT_CUMULATIVE_ARGS
  8226. +#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)        \
  8227. +  (amigaos_init_cumulative_args(&(CUM), (FNTYPE)))
  8228. +
  8229. +/* Update the data in CUM to advance over an argument
  8230. +   of mode MODE and data type TYPE.
  8231. +   (TYPE is null for libcalls where that information may not be available.)  */
  8232. +
  8233. +#undef FUNCTION_ARG_ADVANCE
  8234. +#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)            \
  8235. +  (amigaos_function_arg_advance (&(CUM)))
  8236. +
  8237. +/* A C expression that controls whether a function argument is passed
  8238. +   in a register, and which register. */
  8239. +
  8240. +#undef FUNCTION_ARG
  8241. +#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
  8242. +  ((struct rtx_def *)amigaos_function_arg (&(CUM), (MODE), (TYPE)))
  8243. +
  8244. +/* A C expression whose value is zero if the attributes on TYPE1 and
  8245. +   TYPE2 are incompatible, one if they are compatible, and two if they
  8246. +   are nearly compatible (which causes a warning to be generated).  */
  8247. +
  8248. +#undef COMP_TYPE_ATTRIBUTES
  8249. +#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2)                 \
  8250. +  (comp_amigaos_type_attributes ((TYPE1), (TYPE2)))
  8251. +
  8252. +/* end-GG-local */
  8253. +
  8254. +/* Stack checking and automatic extension support.  */
  8255. +
  8256. +void amigaos_prologue_begin_hook ();
  8257. +#define PROLOGUE_BEGIN_HOOK(STREAM, FSIZE)                \
  8258. +  (amigaos_prologue_begin_hook ((STREAM), (FSIZE)))
  8259. +
  8260. +#define HAVE_ALTERNATE_FRAME_SETUP_F(FSIZE) TARGET_STACKEXTEND
  8261. +
  8262. +void amigaos_alternate_frame_setup_f ();
  8263. +#define ALTERNATE_FRAME_SETUP_F(STREAM, FSIZE)                \
  8264. +  (amigaos_alternate_frame_setup_f ((STREAM), (FSIZE)))
  8265. +
  8266. +#define HAVE_ALTERNATE_FRAME_SETUP(FSIZE) TARGET_STACKEXTEND
  8267. +
  8268. +void amigaos_alternate_frame_setup ();
  8269. +#define ALTERNATE_FRAME_SETUP(STREAM, FSIZE)                \
  8270. +  (amigaos_alternate_frame_setup ((STREAM), (FSIZE)))
  8271. +
  8272. +#define HAVE_ALTERNATE_FRAME_DESTR_F(FSIZE)                \
  8273. +  (TARGET_STACKEXTEND && current_function_calls_alloca)
  8274. +
  8275. +#define ALTERNATE_FRAME_DESTR_F(STREAM, FSIZE)                \
  8276. +  (asm_fprintf ((STREAM), "\tjra %U__unlk_a5_rts\n"))
  8277. +
  8278. +#define HAVE_ALTERNATE_RETURN                        \
  8279. +  (TARGET_STACKEXTEND && frame_pointer_needed &&            \
  8280. +   current_function_calls_alloca)
  8281. +
  8282. +#define ALTERNATE_RETURN(STREAM)
  8283. +
  8284. +struct rtx_def* gen_stack_cleanup_call ();
  8285. +#define HAVE_restore_stack_nonlocal TARGET_STACKEXTEND
  8286. +#define gen_restore_stack_nonlocal gen_stack_cleanup_call
  8287. +
  8288. +#define HAVE_restore_stack_function TARGET_STACKEXTEND
  8289. +#define gen_restore_stack_function gen_stack_cleanup_call
  8290. +
  8291. +#define HAVE_restore_stack_block TARGET_STACKEXTEND
  8292. +#define gen_restore_stack_block gen_stack_cleanup_call
  8293. +
  8294. +#undef TARGET_ALTERNATE_ALLOCATE_STACK
  8295. +#define TARGET_ALTERNATE_ALLOCATE_STACK 1
  8296. +
  8297. +#define ALTERNATE_ALLOCATE_STACK(OPERANDS)                \
  8298. +do                                    \
  8299. +  {                                    \
  8300. +    amigaos_alternate_allocate_stack (OPERANDS);            \
  8301. +    DONE;                                \
  8302. +  }                                    \
  8303. +while (0)
  8304. +
  8305. +/* begin-GG-local: dynamic libraries */
  8306. +
  8307. +#if defined(__amigaos__)
  8308. +
  8309. +/* This macro is used to check if all collect2 facilities should be used.
  8310. +   We need a few special ones, like stripping after linking.  */
  8311. +
  8312. +#define DO_COLLECTING (do_collecting || amigaos_do_collecting())
  8313. +
  8314. +/* This macro is called in collect2 for every GCC argument name.
  8315. +   ARG is a part of commandline (without '\0' at the end).  */
  8316. +
  8317. +#define COLLECT2_GCC_OPTIONS_HOOK(ARG) amigaos_gccopts_hook(ARG)
  8318. +
  8319. +/* This macro is called in collect2 for every ld's "-l" or "*.o" or "*.a"
  8320. +   argument.  ARG is a complete argument, with '\0' at the end.  */
  8321. +
  8322. +#define COLLECT2_LIBNAME_HOOK(ARG) amigaos_libname_hook(ARG)
  8323. +
  8324. +/* This macro is called at collect2 exit, to clean everything up.  */
  8325. +
  8326. +#define COLLECT2_EXTRA_CLEANUP amigaos_collect2_cleanup
  8327. +
  8328. +/* This macro is called just before the first linker invocation.
  8329. +   LD1_ARGV is "char** argv", which will be passed to "ld".  STRIP is an
  8330. +   *address* of "strip_flag" variable.  */
  8331. +
  8332. +#define COLLECT2_PRELINK_HOOK(LD1_ARGV, STRIP) \
  8333. +amigaos_prelink_hook((LD1_ARGV), (STRIP))
  8334. +
  8335. +/* This macro is called just after the first linker invocation, in place of
  8336. +   "nm" and "ldd".  OUTPUT_FILE is the executable's filename.  */
  8337. +
  8338. +#define COLLECT2_POSTLINK_HOOK(OUTPUT_FILE) amigaos_postlink_hook(OUTPUT_FILE)
  8339. +
  8340. +#endif /* __amigaos__ */
  8341. +
  8342. +/* end-GG-local */
  8343. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/m68k.c gcc-2.95.3/gcc/config/m68k/m68k.c
  8344. --- gcc-2.95.3-orig/gcc/config/m68k/m68k.c    1999-08-02 06:51:08.000000000 +0200
  8345. +++ gcc-2.95.3/gcc/config/m68k/m68k.c    2003-12-02 17:50:55.000000000 +0100
  8346. @@ -63,6 +63,8 @@
  8347.  const char *m68k_align_jumps_string;
  8348.  /* Specify power of two alignment used for functions. */
  8349.  const char *m68k_align_funcs_string;
  8350. +/* Specify number of registers for integer, pointer and float arguments.  */
  8351. +const char *m68k_regparm_string;
  8352.  
  8353.  /* Specify power of two alignment used for loops. */
  8354.  int m68k_align_loops;
  8355. @@ -70,6 +72,8 @@
  8356.  int m68k_align_jumps;
  8357.  /* Specify power of two alignment used for functions. */
  8358.  int m68k_align_funcs;
  8359. +/* Specify number of registers for integer, pointer and float arguments.  */
  8360. +int m68k_regparm;
  8361.  
  8362.  /* Nonzero if the last compare/test insn had FP operands.  The
  8363.     sCC expanders peek at this to determine what to do for the
  8364. @@ -124,6 +128,19 @@
  8365.      }
  8366.    else
  8367.      m68k_align_funcs = def_align;
  8368. +
  8369. +  /* Validate -mregparm and -mregparm= value.  */
  8370. +  if (m68k_regparm_string)
  8371. +    {
  8372. +      m68k_regparm = atoi (m68k_regparm_string);
  8373. +      if (m68k_regparm < 1 || m68k_regparm > M68K_MAX_REGPARM)
  8374. +    fatal ("-mregparm=%d is not between 1 and %d",
  8375. +           m68k_regparm, M68K_MAX_REGPARM);
  8376. +      target_flags |= MASK_REGPARM;
  8377. +    }
  8378. +  else
  8379. +    if (TARGET_REGPARM)
  8380. +      m68k_regparm = M68K_DEFAULT_REGPARM;
  8381.  }
  8382.  
  8383.  /* This function generates the assembly code for function entry.
  8384. @@ -151,9 +168,17 @@
  8385.    int fsize = (size + 3) & -4;
  8386.    int cfa_offset = INCOMING_FRAME_SP_OFFSET, cfa_store_offset = cfa_offset;
  8387.    
  8388. +#ifdef PROLOGUE_BEGIN_HOOK
  8389. +  PROLOGUE_BEGIN_HOOK (stream, fsize);
  8390. +#endif
  8391.  
  8392.    if (frame_pointer_needed)
  8393.      {
  8394. +#ifdef HAVE_ALTERNATE_FRAME_SETUP_F
  8395. +      if (HAVE_ALTERNATE_FRAME_SETUP_F (fsize))
  8396. +    ALTERNATE_FRAME_SETUP_F (stream, fsize);
  8397. +      else
  8398. +#endif
  8399.        if (fsize == 0 && TARGET_68040)
  8400.      {
  8401.      /* on the 68040, pea + move is faster than link.w 0 */
  8402. @@ -209,6 +234,10 @@
  8403.        cfa_store_offset += fsize;
  8404.      }
  8405.      }
  8406. +#ifdef HAVE_ALTERNATE_FRAME_SETUP
  8407. +  else if (HAVE_ALTERNATE_FRAME_SETUP (fsize))
  8408. +    ALTERNATE_FRAME_SETUP (stream, fsize);
  8409. +#endif
  8410.    else if (fsize)
  8411.      {
  8412.        if (fsize + 4 < 0x8000)
  8413. @@ -356,11 +385,14 @@
  8414.        mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));
  8415.        num_saved_regs--;
  8416.      }
  8417. -  if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
  8418. +  if (flag_pic && flag_pic < 3 && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
  8419.      {
  8420.        mask |= 1 << (15 - PIC_OFFSET_TABLE_REGNUM);
  8421.        num_saved_regs++;
  8422.      }
  8423. +#ifdef PROLOGUE_EXTRA_SAVE
  8424. +  PROLOGUE_EXTRA_SAVE (mask, num_saved_regs);
  8425. +#endif
  8426.  
  8427.  #if NEED_PROBE
  8428.  #ifdef MOTOROLA
  8429. @@ -462,6 +494,11 @@
  8430.                    -cfa_store_offset + n_regs++ * 4);
  8431.      }
  8432.      }
  8433. +#ifdef HAVE_ALTERNATE_PIC_SETUP
  8434. +  if (HAVE_ALTERNATE_PIC_SETUP)
  8435. +    ALTERNATE_PIC_SETUP (stream);
  8436. +  else
  8437. +#endif
  8438.    if (flag_pic && current_function_uses_pic_offset_table)
  8439.      {
  8440.  #ifdef MOTOROLA
  8441. @@ -568,11 +605,14 @@
  8442.          nregs++;
  8443.      mask |= 1 << regno;
  8444.        }
  8445. -  if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
  8446. +  if (flag_pic && flag_pic < 3 && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
  8447.      {
  8448.        nregs++;
  8449.        mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
  8450.      }
  8451. +#ifdef EPILOGUE_EXTRA_RESTORE
  8452. +  EPILOGUE_EXTRA_RESTORE (mask, nregs);
  8453. +#endif
  8454.    offset = foffset + nregs * 4;
  8455.    /* FIXME : leaf_function_p below is too strong.
  8456.       What we really need to know there is if there could be pending
  8457. @@ -759,6 +799,11 @@
  8458.        fpoffset -= 8;
  8459.      }
  8460.    if (frame_pointer_needed)
  8461. +#ifdef HAVE_ALTERNATE_FRAME_DESTR_F
  8462. +    if (HAVE_ALTERNATE_FRAME_DESTR_F (fsize))
  8463. +      ALTERNATE_FRAME_DESTR_F (stream, fsize);
  8464. +    else
  8465. +#endif
  8466.      fprintf (stream, "\tunlk %s\n",
  8467.           reg_names[FRAME_POINTER_REGNUM]);
  8468.    else if (fsize)
  8469. @@ -828,9 +873,19 @@
  8470.  #endif
  8471.      }
  8472.      }
  8473. +
  8474. +#ifdef EPILOGUE_END_HOOK
  8475. +  EPILOGUE_END_HOOK (stream);
  8476. +#endif
  8477. +
  8478.    if (current_function_pops_args)
  8479.      asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
  8480.    else
  8481. +#ifdef HAVE_ALTERNATE_RETURN
  8482. +    if (HAVE_ALTERNATE_RETURN)
  8483. +      ALTERNATE_RETURN (stream);
  8484. +    else
  8485. +#endif
  8486.      fprintf (stream, "\trts\n");
  8487.  }
  8488.  
  8489. @@ -1327,12 +1382,20 @@
  8490.    /* First handle a simple SYMBOL_REF or LABEL_REF */
  8491.    if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  8492.      {
  8493. +#ifdef LEGITIMATE_BASEREL_OPERAND_P
  8494. +      if (LEGITIMATE_BASEREL_OPERAND_P (orig))
  8495. +    return orig;
  8496. +#endif
  8497. +
  8498.        if (reg == 0)
  8499.      abort ();
  8500.  
  8501. +      if (flag_pic < 3)
  8502.        pic_ref = gen_rtx_MEM (Pmode,
  8503.                   gen_rtx_PLUS (Pmode,
  8504.                         pic_offset_table_rtx, orig));
  8505. +      else
  8506. +    pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, orig);
  8507.        current_function_uses_pic_offset_table = 1;
  8508.        if (reload_in_progress)
  8509.      regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1;
  8510. @@ -3104,6 +3167,10 @@
  8511.                fprintf (file, ":w");
  8512.              if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
  8513.                fprintf (file, ":l");
  8514. +        if ((flag_pic == 3) && (breg == pic_offset_table_rtx))
  8515. +          fprintf (file, ":W");
  8516. +        if ((flag_pic == 4) && (breg == pic_offset_table_rtx))
  8517. +          fprintf (file, ":L");
  8518.            }
  8519.          if (addr != 0 && ireg != 0)
  8520.            {
  8521. @@ -3280,6 +3347,252 @@
  8522.        && (INTVAL (op) >= (-0x7fffffff - 1) && INTVAL (op) <= 0x7fffffff));
  8523.  }
  8524.  
  8525. +/* Argument-passing support functions.  */
  8526. +
  8527. +/* Initialize a variable CUM of type CUMULATIVE_ARGS
  8528. +   for a call to a function whose data type is FNTYPE.
  8529. +   For a library call, FNTYPE is 0.  */
  8530. +
  8531. +void
  8532. +m68k_init_cumulative_args (cum, fntype)
  8533. +     CUMULATIVE_ARGS *cum;
  8534. +     tree fntype;
  8535. +{
  8536. +  cum->last_arg_reg = -1;
  8537. +  cum->regs_already_used = 0;
  8538. +  if (fntype)
  8539. +    {
  8540. +      if (lookup_attribute ("stkparm", TYPE_ATTRIBUTES (fntype)))
  8541. +    cum->num_of_regs = 0;
  8542. +      else
  8543. +    {
  8544. +      tree ratree = lookup_attribute ("regparm", TYPE_ATTRIBUTES (fntype));
  8545. +      if (ratree)
  8546. +        {
  8547. +          cum->num_of_regs = m68k_regparm ? m68k_regparm
  8548. +                          : M68K_DEFAULT_REGPARM;
  8549. +          if (TREE_VALUE (ratree)
  8550. +          && TREE_CODE (TREE_VALUE (ratree)) == TREE_LIST)
  8551. +        {
  8552. +          tree num_of_regs = TREE_VALUE (TREE_VALUE (ratree));
  8553. +          cum->num_of_regs =
  8554. +            num_of_regs ? TREE_INT_CST_LOW (num_of_regs) :
  8555. +              (m68k_regparm ? m68k_regparm : M68K_DEFAULT_REGPARM);
  8556. +        }
  8557. +        }
  8558. +      else
  8559. +        cum->num_of_regs = m68k_regparm;
  8560. +    }
  8561. +    }
  8562. +  else /* Libcall.  */
  8563. +    cum->num_of_regs = 0;
  8564. +
  8565. +  if (cum->num_of_regs)
  8566. +    {
  8567. +      /* If this is a vararg call, put all arguments on stack.  */
  8568. +      tree param, next_param;
  8569. +      for (param = TYPE_ARG_TYPES (fntype); param; param = next_param)
  8570. +    {
  8571. +      next_param = TREE_CHAIN (param);
  8572. +      if (!next_param && TREE_VALUE (param) != void_type_node)
  8573. +        cum->num_of_regs = 0;
  8574. +    }
  8575. +    }
  8576. +
  8577. +#if ! defined (PCC_STATIC_STRUCT_RETURN) && defined (STRUCT_VALUE_REGNUM)
  8578. +  /* If return value is a structure, and we pass the buffer address in a
  8579. +     register, we can't use this register for our own purposes.
  8580. +     FIXME: Something similar would be useful for static chain.  */
  8581. +  if (fntype && aggregate_value_p (TREE_TYPE (fntype)))
  8582. +    cum->regs_already_used |= (1 << STRUCT_VALUE_REGNUM);
  8583. +#endif
  8584. +}
  8585. +
  8586. +/* Update the data in CUM to advance over an argument.  */
  8587. +
  8588. +void
  8589. +m68k_function_arg_advance (cum)
  8590. +     CUMULATIVE_ARGS *cum;
  8591. +{
  8592. +  if (cum->last_arg_reg != -1)
  8593. +    {
  8594. +      int count;
  8595. +      for (count = 0; count < cum->last_arg_len; count++)
  8596. +    cum->regs_already_used |= (1 << (cum->last_arg_reg + count));
  8597. +      cum->last_arg_reg = -1;
  8598. +    }
  8599. +}
  8600. +
  8601. +/* Define where to put the arguments to a function.
  8602. +   Value is zero to push the argument on the stack,
  8603. +   or a hard register in which to store the argument.
  8604. +
  8605. +   MODE is the argument's machine mode.
  8606. +   TYPE is the data type of the argument (as a tree).
  8607. +    This is null for libcalls where that information may
  8608. +    not be available.
  8609. +   CUM is a variable of type CUMULATIVE_ARGS which gives info about
  8610. +    the preceding args and about the function being called.  */
  8611. +
  8612. +struct rtx_def *
  8613. +m68k_function_arg (cum, mode, type)
  8614. +     CUMULATIVE_ARGS *cum;
  8615. +     enum machine_mode mode;
  8616. +     tree type;
  8617. +{
  8618. +  if (cum->num_of_regs)
  8619. +    {
  8620. +      int regbegin = -1, altregbegin = -1, len;
  8621. +
  8622. +      /* FIXME: The last condition below is a workaround for a bug.  */
  8623. +      if (TARGET_68881 && FLOAT_MODE_P (mode) &&
  8624. +      GET_MODE_UNIT_SIZE (mode) <= 12 &&
  8625. +      (GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT || mode == SCmode))
  8626. +    {
  8627. +      regbegin = 16; /* FPx */
  8628. +      len = GET_MODE_NUNITS (mode);
  8629. +    }
  8630. +      /* FIXME: Two last conditions below are workarounds for bugs.  */
  8631. +      else if (INTEGRAL_MODE_P (mode) && mode !=CQImode && mode != CHImode)
  8632. +    {
  8633. +      if (POINTER_TYPE_P (type))
  8634. +        regbegin = 8; /* Ax */
  8635. +      else
  8636. +        regbegin = 0; /* Dx */
  8637. +      altregbegin = 8 - regbegin;
  8638. +      len = (GET_MODE_SIZE (mode) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
  8639. +    }
  8640. +
  8641. +      if (regbegin != -1)
  8642. +    {
  8643. +      int reg;
  8644. +      long mask;
  8645. +
  8646. +look_for_reg:
  8647. +      mask = 1 << regbegin;
  8648. +      for (reg = 0; reg < cum->num_of_regs; reg++, mask <<= 1)
  8649. +        if (!(cum->regs_already_used & mask))
  8650. +          {
  8651. +        int end;
  8652. +        for (end = reg; end < cum->num_of_regs && end < reg + len;
  8653. +             end++, mask <<= 1)
  8654. +          if (cum->regs_already_used & mask)
  8655. +            break;
  8656. +        if (end == reg + len)
  8657. +          {
  8658. +            cum->last_arg_reg = reg + regbegin;
  8659. +            cum->last_arg_len = len;
  8660. +            break;
  8661. +          }
  8662. +          }
  8663. +
  8664. +      if (reg == cum->num_of_regs && altregbegin != -1)
  8665. +        {
  8666. +          regbegin = altregbegin;
  8667. +          altregbegin = -1;
  8668. +          goto look_for_reg;
  8669. +        }
  8670. +    }
  8671. +
  8672. +      if (cum->last_arg_reg != -1)
  8673. +    return gen_rtx (REG, mode, cum->last_arg_reg);
  8674. +    }
  8675. +  return 0;
  8676. +}
  8677. +
  8678. +/* Attributes support.  */
  8679. +
  8680. +/* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine
  8681. +   specific attribute for TYPE.  The attributes in ATTRIBUTES have previously
  8682. +   been assigned to TYPE.  */
  8683. +
  8684. +int
  8685. +valid_m68k_type_attribute (type, attributes, identifier, args)
  8686. +     tree type, attributes, identifier, args;
  8687. +{
  8688. +  if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
  8689. +    {
  8690. +      /* 'regparm' accepts one optional argument - number of registers in
  8691. +     single class that should be used to pass arguments.  */
  8692. +      if (is_attribute_p ("regparm", identifier))
  8693. +    {
  8694. +      if (lookup_attribute ("stkparm", attributes))
  8695. +        {
  8696. +          error ("`regparm' and `stkparm' are mutually exclusive");
  8697. +          return 0;
  8698. +        }
  8699. +      if (args && TREE_CODE (args) == TREE_LIST)
  8700. +        {
  8701. +          tree numofregs = TREE_VALUE (args);
  8702. +          if (numofregs)
  8703. +        if (TREE_CODE (numofregs) != INTEGER_CST
  8704. +            || TREE_INT_CST_HIGH (numofregs)
  8705. +            || TREE_INT_CST_LOW (numofregs) < 1
  8706. +            || TREE_INT_CST_LOW (numofregs) > M68K_MAX_REGPARM)
  8707. +          {
  8708. +            error ("invalid argument to `regparm' attribute");
  8709. +            return 0;
  8710. +          }
  8711. +        }
  8712. +      return 1;
  8713. +    }
  8714. +      if (is_attribute_p ("stkparm", identifier))
  8715. +    {
  8716. +      if (lookup_attribute ("regparm", attributes))
  8717. +        {
  8718. +          error ("`regparm' and `stkparm' are mutually exclusive");
  8719. +          return 0;
  8720. +        }
  8721. +      return 1;
  8722. +    }
  8723. +    }
  8724. +
  8725. +  return 0;
  8726. +}
  8727. +
  8728. +/* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
  8729. +   one if they are compatible, and two if they are nearly compatible
  8730. +   (which causes a warning to be generated). */
  8731. +
  8732. +int
  8733. +comp_m68k_type_attributes (type1, type2)
  8734. +     tree type1, type2;
  8735. +{
  8736. +  /* Functions or methods are incompatible if they specify mutually
  8737. +     exclusive ways of passing arguments.  */
  8738. +  if (TREE_CODE (type1) == FUNCTION_TYPE || TREE_CODE (type1) == METHOD_TYPE)
  8739. +    {
  8740. +      tree arg1, arg2;
  8741. +      if (!! lookup_attribute ("stkparm", TYPE_ATTRIBUTES (type1)) !=
  8742. +         !! lookup_attribute ("stkparm", TYPE_ATTRIBUTES (type2))
  8743. +      || !! lookup_attribute ("regparm", TYPE_ATTRIBUTES (type1)) !=
  8744. +         !! lookup_attribute ("regparm", TYPE_ATTRIBUTES (type2)))
  8745. +    return 0; /* 'regparm' and 'stkparm' are mutually exclusive.  */
  8746. +
  8747. +      arg1 = lookup_attribute ("regparm", TYPE_ATTRIBUTES (type1));
  8748. +      arg2 = lookup_attribute ("regparm", TYPE_ATTRIBUTES (type2));
  8749. +      if (arg1 && arg2)
  8750. +    {
  8751. +      int num1 = 0, num2 = 0;
  8752. +      if (TREE_VALUE (arg1) && TREE_CODE (TREE_VALUE (arg1)) == TREE_LIST)
  8753. +        {
  8754. +          tree numofregs = TREE_VALUE (TREE_VALUE (arg1));
  8755. +          if (numofregs)
  8756. +        num1 = TREE_INT_CST_LOW (numofregs);
  8757. +        }
  8758. +      if (TREE_VALUE (arg2) && TREE_CODE (TREE_VALUE (arg2)) == TREE_LIST)
  8759. +        {
  8760. +          tree numofregs = TREE_VALUE (TREE_VALUE (arg2));
  8761. +          if (numofregs)
  8762. +        num2 = TREE_INT_CST_LOW (numofregs);
  8763. +        }
  8764. +      if (num1 != num2)
  8765. +        return 0; /* Different numbers, or no number in one type.  */
  8766. +    }
  8767. +    }
  8768. +  return 1;
  8769. +}
  8770. +
  8771.  char *
  8772.  output_andsi3 (operands)
  8773.       rtx *operands;
  8774. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/m68k.h gcc-2.95.3/gcc/config/m68k/m68k.h
  8775. --- gcc-2.95.3-orig/gcc/config/m68k/m68k.h    2001-01-25 15:03:34.000000000 +0100
  8776. +++ gcc-2.95.3/gcc/config/m68k/m68k.h    2003-12-02 17:50:55.000000000 +0100
  8777. @@ -68,10 +68,8 @@
  8778.  #define MASK_RTD    8
  8779.  #define TARGET_RTD (target_flags & MASK_RTD)
  8780.  
  8781. -/* Compile passing first two args in regs 0 and 1.
  8782. -   This exists only to test compiler features that will
  8783. -   be needed for RISC chips.  It is not usable
  8784. -   and is not intended to be usable on this cpu.  */
  8785. +/* Compile using the first 'm68k_regparm' data, address and float
  8786. +   registers for arguments passing.  */
  8787.  #define MASK_REGPARM    16
  8788.  #define TARGET_REGPARM (target_flags & MASK_REGPARM)
  8789.  
  8790. @@ -155,9 +153,9 @@
  8791.      { "68881", MASK_68881},                        \
  8792.      { "soft-float", - (MASK_FPA|MASK_SKY|MASK_68040_ONLY|MASK_68881)},    \
  8793.      { "68020-40", -(MASK_5200|MASK_68060|MASK_68040_ONLY)},        \
  8794. -    { "68020-40", (MASK_BITFIELD|MASK_68881|MASK_68020|MASK_68040)},    \
  8795. +    { "68020-40", (MASK_BITFIELD|MASK_68020|MASK_68040)},    /* ZZZ olsen */    \
  8796.      { "68020-60", -(MASK_5200|MASK_68040_ONLY)},            \
  8797. -    { "68020-60", (MASK_BITFIELD|MASK_68881|MASK_68020|MASK_68040    \
  8798. +    { "68020-60", (MASK_BITFIELD|MASK_68020|MASK_68040    /* ZZZ olsen */    \
  8799.             |MASK_68060)},                    \
  8800.      { "68030", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY)},    \
  8801.      { "68030", (MASK_68020|MASK_BITFIELD)},                \
  8802. @@ -182,6 +180,8 @@
  8803.      { "cpu32", MASK_68020},                        \
  8804.      { "align-int", MASK_ALIGN_INT },                    \
  8805.      { "no-align-int", -MASK_ALIGN_INT },                \
  8806. +    { "regparm", MASK_REGPARM},                        \
  8807. +    { "no-regparm", - MASK_REGPARM},                    \
  8808.      SUBTARGET_SWITCHES                            \
  8809.      { "", TARGET_DEFAULT}}
  8810.  /* TARGET_DEFAULT is defined in sun*.h and isi.h, etc.  */
  8811. @@ -199,6 +199,7 @@
  8812.  { { "align-loops=",    &m68k_align_loops_string },            \
  8813.    { "align-jumps=",    &m68k_align_jumps_string },            \
  8814.    { "align-functions=",    &m68k_align_funcs_string },            \
  8815. +  { "regparm=",        &m68k_regparm_string },                \
  8816.    SUBTARGET_OPTIONS                            \
  8817.  }
  8818.  
  8819. @@ -809,7 +810,7 @@
  8820.  #ifndef SUPPORT_SUN_FPA
  8821.  
  8822.  #define CLASS_MAX_NREGS(CLASS, MODE)    \
  8823. - ((CLASS) == FP_REGS ? 1 \
  8824. + ((CLASS) == FP_REGS ? GET_MODE_NUNITS (MODE) \
  8825.    : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
  8826.  
  8827.  /* Moves between fp regs and other regs are two insns.  */
  8828. @@ -821,7 +822,8 @@
  8829.  #else /* defined SUPPORT_SUN_FPA */
  8830.  
  8831.  #define CLASS_MAX_NREGS(CLASS, MODE)    \
  8832. - ((CLASS) == FP_REGS || (CLASS) == FPA_REGS || (CLASS) == LO_FPA_REGS ? 1 \
  8833. + ((CLASS) == FP_REGS || (CLASS) == FPA_REGS || (CLASS) == LO_FPA_REGS ?    \
  8834. +   GET_MODE_NUNITS (MODE)                        \
  8835.    : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
  8836.  
  8837.  /* Moves between fp regs and other regs are two insns.  */
  8838. @@ -925,10 +927,19 @@
  8839.  
  8840.  #define PCC_STATIC_STRUCT_RETURN
  8841.  
  8842. -/* 1 if N is a possible register number for function argument passing.
  8843. -   On the 68000, no registers are used in this way.  */
  8844. +/* 1 if N is a possible register number for function argument passing.  */
  8845.  
  8846. -#define FUNCTION_ARG_REGNO_P(N) 0
  8847. +#define FUNCTION_ARG_REGNO_P(N)            \
  8848. +  (((N) >= 0 && (N) < M68K_MAX_REGPARM)        \
  8849. +   || ((N) >= 8 && (N) < 8 + M68K_MAX_REGPARM)    \
  8850. +   || (TARGET_68881 && (N) >= 16 && (N) < 16 + M68K_MAX_REGPARM))
  8851. +
  8852. +/* Nonzero if we need to generate special stack-allocating insns.
  8853. +   On most systems they are not needed.
  8854. +   When they are needed, also define ALTERNATE_ALLOCATE_STACK (see m68k.md)
  8855. +   to perform the necessary actions.  */
  8856. +
  8857. +#define TARGET_ALTERNATE_ALLOCATE_STACK 0
  8858.  
  8859.  /* Define a data type for recording info about an argument list
  8860.     during the scan of that argument list.  This data type should
  8861. @@ -936,28 +947,52 @@
  8862.     and about the args processed so far, enough to enable macros
  8863.     such as FUNCTION_ARG to determine where the next arg should go.
  8864.  
  8865. -   On the m68k, this is a single integer, which is a number of bytes
  8866. -   of arguments scanned so far.  */
  8867. +   On the m68k, this is a structure:
  8868. +   num_of_regs: number of data, address and float registers to use for
  8869. +     arguments passing (if it's 2, than pass arguments in d0, d1, a0, a1,
  8870. +     fp0 and fp1). 0 - pass everything on stack. vararg calls are
  8871. +     always passed entirely on stack.
  8872. +   regs_already_used: bitmask of the already used registers.
  8873. +   last_arg_reg - register number of the most recently passed argument.
  8874. +     -1 if passed on stack.
  8875. +   last_arg_len - number of registers used by the most recently passed
  8876. +     argument.
  8877. +*/
  8878. +
  8879. +struct m68k_args
  8880. +{
  8881. +  int num_of_regs;
  8882. +  long regs_already_used;
  8883. +  int last_arg_reg;
  8884. +  int last_arg_len;
  8885. +};
  8886. +
  8887. +#define CUMULATIVE_ARGS struct m68k_args
  8888. +
  8889. +/* Max. number of data, address and float registers to be used for passing
  8890. +   integer, pointer and float arguments when TARGET_REGPARM.
  8891. +   It's 4, so d0-d3, a0-a3 and fp0-fp3 can be used.  */
  8892. +
  8893. +#define M68K_MAX_REGPARM 4
  8894.  
  8895. -#define CUMULATIVE_ARGS int
  8896. +/* The default number of data, address and float registers to use when
  8897. +   user specified '-mregparm' switch, not '-mregparm=<value>' option.  */
  8898. +
  8899. +#define M68K_DEFAULT_REGPARM 2
  8900.  
  8901.  /* Initialize a variable CUM of type CUMULATIVE_ARGS
  8902.     for a call to a function whose data type is FNTYPE.
  8903. -   For a library call, FNTYPE is 0.
  8904. -
  8905. -   On the m68k, the offset starts at 0.  */
  8906. +   For a library call, FNTYPE is 0.  */
  8907.  
  8908.  #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)    \
  8909. - ((CUM) = 0)
  8910. +  (m68k_init_cumulative_args (&(CUM), (FNTYPE)))
  8911.  
  8912.  /* Update the data in CUM to advance over an argument
  8913.     of mode MODE and data type TYPE.
  8914.     (TYPE is null for libcalls where that information may not be available.)  */
  8915.  
  8916.  #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)    \
  8917. - ((CUM) += ((MODE) != BLKmode            \
  8918. -        ? (GET_MODE_SIZE (MODE) + 3) & ~3    \
  8919. -        : (int_size_in_bytes (TYPE) + 3) & ~3))
  8920. +  (m68k_function_arg_advance (&(CUM)))
  8921.  
  8922.  /* Define where to put the arguments to a function.
  8923.     Value is zero to push the argument on the stack,
  8924. @@ -972,24 +1007,21 @@
  8925.     NAMED is nonzero if this argument is a named parameter
  8926.      (otherwise it is an extra parameter matching an ellipsis).  */
  8927.  
  8928. -/* On the 68000 all args are pushed, except if -mregparm is specified
  8929. -   then the first two words of arguments are passed in d0, d1.
  8930. -   *NOTE* -mregparm does not work.
  8931. -   It exists only to test register calling conventions.  */
  8932. +/* On the 68000 all args are pushed, except if -mregparm is specified,
  8933. +   then a number of arguments is passed in the first 'm68k_regparm' data,
  8934. +   address and float registers.
  8935. +   Note: by default, the static-chain is passed in a0. Targets that want
  8936. +   to make full use of '-mregparm' are advised to pass the static-chain
  8937. +   somewhere else.  */
  8938.  
  8939.  #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
  8940. -((TARGET_REGPARM && (CUM) < 8) ? gen_rtx_REG ((MODE), (CUM) / 4) : 0)
  8941. +  ((struct rtx_def *)m68k_function_arg (&(CUM), (MODE), (TYPE)))
  8942.  
  8943.  /* For an arg passed partly in registers and partly in memory,
  8944.     this is the number of registers used.
  8945.     For args passed entirely in registers or entirely in memory, zero.  */
  8946.  
  8947. -#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
  8948. -((TARGET_REGPARM && (CUM) < 8                    \
  8949. -  && 8 < ((CUM) + ((MODE) == BLKmode                \
  8950. -              ? int_size_in_bytes (TYPE)        \
  8951. -              : GET_MODE_SIZE (MODE))))          \
  8952. - ? 2 - (CUM) / 4 : 0)
  8953. +#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) (0)
  8954.  
  8955.  /* Generate the assembly code for function entry. */
  8956.  #define FUNCTION_PROLOGUE(FILE, SIZE) output_function_prologue(FILE, SIZE)
  8957. @@ -1190,6 +1222,8 @@
  8958.     of a local variable as a function of frame_pointer_needed, which
  8959.     is hard.  */
  8960.  
  8961. +#define SUBTARGET_INITIAL_FP_OFFSET(OFFSET)
  8962. +
  8963.  #define INITIAL_FRAME_POINTER_OFFSET(DEPTH)            \
  8964.  { int regno;                            \
  8965.    int offset = -4;                        \
  8966. @@ -1199,8 +1233,9 @@
  8967.    for (regno = 0; regno < 16; regno++)                \
  8968.      if (regs_ever_live[regno] && ! call_used_regs[regno])    \
  8969.        offset += 4;                        \
  8970. -  if (flag_pic && current_function_uses_pic_offset_table)    \
  8971. +  if (flag_pic && flag_pic <= 2 && current_function_uses_pic_offset_table)    \
  8972.      offset += 4;                        \
  8973. +  SUBTARGET_INITIAL_FP_OFFSET (offset);                \
  8974.    (DEPTH) = (offset + ((get_frame_size () + 3) & -4)        \
  8975.           + (get_frame_size () == 0 ? 0 : 4));        \
  8976.  }
  8977. @@ -2083,6 +2118,23 @@
  8978.  
  8979.  #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
  8980.  
  8981. +
  8982. +/* Attributes support.  */
  8983. +
  8984. +/* A C expression whose value is nonzero if IDENTIFIER with arguments
  8985. +   ARGS is a valid machine specific attribute for TYPE.  The attributes
  8986. +   in ATTRIBUTES have previously been assigned to TYPE.  */
  8987. +
  8988. +#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \
  8989. +  (valid_m68k_type_attribute ((TYPE), (ATTRIBUTES), (IDENTIFIER), (ARGS)))
  8990. +
  8991. +/* A C expression whose value is zero if the attributes on TYPE1 and
  8992. +   TYPE2 are incompatible, one if they are compatible, and two if they
  8993. +   are nearly compatible (which causes a warning to be generated).  */
  8994. +
  8995. +#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \
  8996. +  (comp_m68k_type_attributes ((TYPE1), (TYPE2)))
  8997. +
  8998.  /* Define functions defined in aux-output.c and used in templates.  */
  8999.  
  9000.  extern char *output_move_const_into_data_reg ();
  9001. @@ -2115,9 +2167,11 @@
  9002.  extern const char *m68k_align_loops_string;
  9003.  extern const char *m68k_align_jumps_string;
  9004.  extern const char *m68k_align_funcs_string;
  9005. +extern const char *m68k_regparm_string;
  9006.  extern int m68k_align_loops;
  9007.  extern int m68k_align_jumps;
  9008.  extern int m68k_align_funcs;
  9009. +extern int m68k_regparm;
  9010.  extern int m68k_last_compare_had_fp_operands;
  9011.  
  9012.  /* Functions from m68k.c used in macros.  */
  9013. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/m68k.md gcc-2.95.3/gcc/config/m68k/m68k.md
  9014. --- gcc-2.95.3-orig/gcc/config/m68k/m68k.md    1999-08-05 08:22:05.000000000 +0200
  9015. +++ gcc-2.95.3/gcc/config/m68k/m68k.md    2003-12-02 17:50:55.000000000 +0100
  9016. @@ -6799,7 +6799,7 @@
  9017.       (match_operand:SI 1 "general_operand" "g"))]
  9018.    ;; Operand 1 not really used on the m68000.
  9019.  
  9020. -  "! flag_pic"
  9021. +  "(! flag_pic || flag_pic >= 3)"
  9022.    "*
  9023.  #if defined (MOTOROLA) && !defined (USE_GAS)
  9024.  #ifdef MOTOROLA_BSR
  9025. @@ -6819,7 +6819,7 @@
  9026.       (match_operand:SI 1 "general_operand" "g"))]
  9027.    ;; Operand 1 not really used on the m68000.
  9028.  
  9029. -  "flag_pic"
  9030. +  "(flag_pic && flag_pic < 3)"
  9031.    "*
  9032.    if (GET_CODE (operands[0]) == MEM
  9033.        && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  9034. @@ -6862,7 +6862,7 @@
  9035.      (call (match_operand:QI 1 "memory_operand" "o")
  9036.            (match_operand:SI 2 "general_operand" "g")))]
  9037.    ;; Operand 2 not really used on the m68000.
  9038. -  "! flag_pic"
  9039. +  "(! flag_pic || flag_pic >= 3)"
  9040.    "*
  9041.  #if defined (MOTOROLA) && !defined (USE_GAS)
  9042.  #ifdef MOTOROLA_BSR
  9043. @@ -6882,7 +6882,7 @@
  9044.      (call (match_operand:QI 1 "memory_operand" "o")
  9045.            (match_operand:SI 2 "general_operand" "g")))]
  9046.    ;; Operand 2 not really used on the m68000.
  9047. -  "flag_pic"
  9048. +  "(flag_pic && flag_pic < 3)"
  9049.    "*
  9050.    if (GET_CODE (operands[1]) == MEM
  9051.        && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  9052. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/t-amigaos gcc-2.95.3/gcc/config/m68k/t-amigaos
  9053. --- gcc-2.95.3-orig/gcc/config/m68k/t-amigaos    1970-01-01 01:00:00.000000000 +0100
  9054. +++ gcc-2.95.3/gcc/config/m68k/t-amigaos    2003-12-02 17:50:55.000000000 +0100
  9055. @@ -0,0 +1,90 @@
  9056. +# Makefile fragment for AmigaOS target.
  9057. +
  9058. +# Each compilation environment (Manx, Dice, GCC, SAS/C, etc) provides its
  9059. +# own equivalent of the UNIX /usr/include tree.  For gcc, the standard headers
  9060. +# are in /gg/include and system specific headers are in /gg/os-include.
  9061. +# Use these paths for fixincludes.
  9062. +
  9063. +SYSTEM_HEADER_DIR = /gcc/include
  9064. +
  9065. +# Extra object file linked to the cc1* executables.
  9066. +amigaos.o: $(srcdir)/config/m68k/amigaos.c $(CONFIG_H)
  9067. +    $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
  9068. +
  9069. +# We don't need a libgcc1, it's all in ixemul.library and LibNIX
  9070. +
  9071. +LIBGCC1 = libgcc1.null
  9072. +CROSS_LIBGCC1 = libgcc1.null
  9073. +
  9074. +# Additional target dependent options for compiling libgcc.a.  This just
  9075. +# ensures that we don't compile libgcc* with anything other than a
  9076. +# fixed stack.
  9077. +
  9078. +TARGET_LIBGCC2_CFLAGS = -mfixedstack
  9079. +
  9080. +# Support for building multiple version of libgcc.
  9081. +# Note: this is taken from the toplevel Makefile.in multilib support.
  9082. +LIBGCC = stmp-libgcc-multi
  9083. +INSTALL_LIBGCC = install-libgcc-multi
  9084. +
  9085. +LIBGCC_MULTI =    ".;" \
  9086. +        "libb;@resident" \
  9087. +        "libm020;@m68020" \
  9088. +        "libb/libm020;@resident@m68020" \
  9089. +        "libb32/libm020;@resident32@m68020"
  9090. +
  9091. +# Build multiple copies of libgcc.a, one for each target switch.
  9092. +stmp-libgcc-multi: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \
  9093. +   frame.h \
  9094. +   $(LIB2ADD) machmode.h longlong.h gbl-ctors.h config.status
  9095. +    # We need the following explicit mkdir, since the toplevel
  9096. +    # Makefile.in attempts to create only the last directory
  9097. +    # of a path.
  9098. +    if [ -d libb32 ]; then true; else mkdir libb32; fi
  9099. +    for i in $(LIBGCC_MULTI); do \
  9100. +      dir=`echo $$i | sed -e 's/;.*$$//'`; \
  9101. +      flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
  9102. +      $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
  9103. +        AR_FOR_TARGET="$(AR_FOR_TARGET)" \
  9104. +        AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
  9105. +        CC="$(CC)" CFLAGS="$(CFLAGS)" \
  9106. +        RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
  9107. +        RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
  9108. +        LANGUAGES="$(LANGUAGES)" \
  9109. +        HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
  9110. +        LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) $${flags}" \
  9111. +        MULTILIB_CFLAGS="$${flags}" \
  9112. +        LIBGCC1="$(LIBGCC1)" LIBGCC2="$(LIBGCC2)" \
  9113. +        dir="$${dir}" stmp-multilib-sub; \
  9114. +      if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  9115. +    done
  9116. +    touch stmp-libgcc-multi
  9117. +
  9118. +# Install multiple versions of libgcc.a.
  9119. +install-libgcc-multi: stmp-libgcc-multi installdirs
  9120. +    # We need the following explicit mkdir, since below we attempt to
  9121. +    # create only the last directory of a path.
  9122. +    if [ -d $(libsubdir)/libb32 ]; then true; else mkdir $(libsubdir)/libb32; fi
  9123. +    for i in $(LIBGCC_MULTI); do \
  9124. +      dir=`echo $$i | sed -e 's/;.*$$//'`; \
  9125. +      if [ -d $(libsubdir)/$${dir} ]; then true; else mkdir $(libsubdir)/$${dir}; fi; \
  9126. +      for f in libgcc.a $(EXTRA_MULTILIB_PARTS); do \
  9127. +        rm -f $(libsubdir)/$${dir}/$${f}; \
  9128. +        $(INSTALL_DATA) $${dir}/$${f} $(libsubdir)/$${dir}/$${f}; \
  9129. +      done; \
  9130. +      if $(RANLIB_TEST_FOR_TARGET); then \
  9131. +        (cd $(libsubdir)/$${dir}; $(RANLIB_FOR_TARGET) libgcc.a); \
  9132. +      else true; fi; \
  9133. +      chmod a-x $(libsubdir)/$${dir}/libgcc.a; \
  9134. +    done
  9135. +
  9136. +### begin-GG-local: dynamic libraries
  9137. +# Extra objects that get compiled and linked to collect2
  9138. +
  9139. +EXTRA_COLLECT2_OBJS = amigacollect2.o
  9140. +
  9141. +# Build supplimentary AmigaOS target support file for collect2
  9142. +amigacollect2.o: amigacollect2.c
  9143. +    $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  9144. +    -DA2IXDIR_PREFIX=\"$(prefix)/share/a2ixlibrary\" $(srcdir)/amigacollect2.c
  9145. +### end-GG-local
  9146. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/x-amigaos gcc-2.95.3/gcc/config/m68k/x-amigaos
  9147. --- gcc-2.95.3-orig/gcc/config/m68k/x-amigaos    1970-01-01 01:00:00.000000000 +0100
  9148. +++ gcc-2.95.3/gcc/config/m68k/x-amigaos    2003-12-02 17:50:55.000000000 +0100
  9149. @@ -0,0 +1,77 @@
  9150. +# Makefile fragment for AmigaOS host
  9151. +
  9152. +# Uncomment the following macro to get a resident GCC. We don't do it
  9153. +# by default, since we want to support users with mc68000.
  9154. +# WARNING!  If you uncomment this, you MUST add the same flags to the
  9155. +# libiberty's Makefile (libiberty is now linked into GCC executables).
  9156. +
  9157. +#RESIDENT = -m68020 -resident32
  9158. +
  9159. +# Additional host flags that are not used when compiling with GCC_FOR_TARGET,
  9160. +# such as when compiling the libgcc* runtime archives. GCC uses stack
  9161. +# a lot, and since AmigaOS provides processes with a small, fixed size
  9162. +# stack, we have to generate code that will extend it whenever necessary.
  9163. +
  9164. +XCFLAGS = -mstackextend $(RESIDENT)
  9165. +
  9166. +# AmigaOS supports "AmigaGuide(R)" hypertext files. For GCC, these are
  9167. +# build with a custom "makeinfo".
  9168. +
  9169. +### begin-GG-local: gcc-amigaos
  9170. +EXTRA_DOC_TARGETS = guide gcc-amigaos-doc
  9171. +### end-GG-local
  9172. +
  9173. +# Arrange for guides to be build with GCC, in the build directory.
  9174. +
  9175. +ALL = all.internal doc
  9176. +
  9177. +# Actually build guides
  9178. +
  9179. +guide: cpp.guide gcc.guide
  9180. +
  9181. +cpp.guide: cpp.texi
  9182. +    $(MAKEINFO) -I$(srcdir) $(srcdir)/cpp.texi --output=$@ --amiga
  9183. +
  9184. +gcc.guide: gcc.texi extend.texi install.texi invoke.texi \
  9185. +        md.texi rtl.texi tm.texi
  9186. +    $(MAKEINFO) -I$(srcdir) $(srcdir)/gcc.texi --output=$@ --amiga
  9187. +
  9188. +# Arrange for guides to be installed with GCC.
  9189. +
  9190. +### begin-GG-local: gcc-amigaos
  9191. +INSTALL_TARGET=install-normal install-guide install-gcc-amigaos-doc
  9192. +### end-GG-local
  9193. +
  9194. +# Where the guide files go
  9195. +
  9196. +guidedir = $(prefix)/guide
  9197. +
  9198. +# Actually install guides.
  9199. +
  9200. +install-guide: doc installdirs
  9201. +    -if [ -d $(guidedir) ] ; then true ; else mkdir $(guidedir) ; chmod a+rx $(guidedir) ; fi
  9202. +    -rm -f $(guidedir)/cpp.guide $(guidedir)/gcc.guide
  9203. +    for f in cpp.guide gcc.guide; \
  9204. +    do $(INSTALL_DATA) $$f $(guidedir)/$$f; done
  9205. +    -chmod a-x $(guidedir)/cpp.guide $(guidedir)/gcc.guide
  9206. +
  9207. +### begin-GG-local: gcc-amigaos
  9208. +# Build and install gcc-amigaos.guide - documentation specific to the
  9209. +# AmigaOS port of GCC.
  9210. +
  9211. +gcc-amigaos-doc: gcc-amigaos.info gcc-amigaos.guide
  9212. +
  9213. +gcc-amigaos.info: gcc-amigaos.texi
  9214. +    $(MAKEINFO) -I$(srcdir) $(srcdir)/gcc-amigaos.texi --output=$@
  9215. +
  9216. +gcc-amigaos.guide: gcc-amigaos.texi
  9217. +    $(MAKEINFO) -I$(srcdir) $(srcdir)/gcc-amigaos.texi --output=$@ --amiga
  9218. +
  9219. +install-gcc-amigaos-doc: doc installdirs
  9220. +    -if [ -d $(guidedir) ] ; then true ; else mkdir $(guidedir) ; chmod a+rx $(guidedir) ; fi
  9221. +    -rm -f $(infodir)/gcc-amigaos.info* $(guidedir)/gcc-amigaos.guide
  9222. +    for f in gcc-amigaos.info*; \
  9223. +    do $(INSTALL_DATA) $$f $(infodir)/$$f; done
  9224. +    $(INSTALL_DATA) gcc-amigaos.guide $(guidedir)
  9225. +    -chmod a-x $(infodir)/gcc-amigaos.info* $(guidedir)/gcc-amigaos.guide
  9226. +### end-GG-local
  9227. diff -urNEBb gcc-2.95.3-orig/gcc/config/m68k/xm-amigaos.h gcc-2.95.3/gcc/config/m68k/xm-amigaos.h
  9228. --- gcc-2.95.3-orig/gcc/config/m68k/xm-amigaos.h    1970-01-01 01:00:00.000000000 +0100
  9229. +++ gcc-2.95.3/gcc/config/m68k/xm-amigaos.h    2003-12-02 17:50:55.000000000 +0100
  9230. @@ -0,0 +1,105 @@
  9231. +/* Configuration for GNU C-compiler for m68k Amiga, running AmigaOS.
  9232. +   Copyright (C) 1992, 93-96, 1997 Free Software Foundation, Inc.
  9233. +   Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  9234. +
  9235. +This file is part of GNU CC.
  9236. +
  9237. +GNU CC is free software; you can redistribute it and/or modify
  9238. +it under the terms of the GNU General Public License as published by
  9239. +the Free Software Foundation; either version 2, or (at your option)
  9240. +any later version.
  9241. +
  9242. +GNU CC is distributed in the hope that it will be useful,
  9243. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  9244. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9245. +GNU General Public License for more details.
  9246. +
  9247. +You should have received a copy of the GNU General Public License
  9248. +along with GNU CC; see the file COPYING.  If not, write to
  9249. +the Free Software Foundation, 59 Temple Place - Suite 330,
  9250. +Boston, MA 02111-1307, USA.  */
  9251. +
  9252. +/* First include the generic header, then modify some parts.  */
  9253. +
  9254. +#include "m68k/xm-m68k.h"
  9255. +
  9256. +#ifndef _FCNTL_H_
  9257. +#include <fcntl.h>
  9258. +#endif
  9259. +
  9260. +/* Define various things that the AmigaOS host has.  */
  9261. +
  9262. +#define HAVE_ATEXIT
  9263. +#define HAVE_RENAME
  9264. +
  9265. +/* AmigaOS specific headers, such as from the Native Developer Update kits,
  9266. +   go in SYSTEM_INCLUDE_DIR.  STANDARD_INCLUDE_DIR is the equivalent of
  9267. +   Unix "/usr/include".  All other include paths are set in Makefile.  */
  9268. +
  9269. +#define SYSTEM_INCLUDE_DIR    "/gcc/os-include"
  9270. +#define STANDARD_INCLUDE_DIR    "/gcc/include"
  9271. +
  9272. +#define STANDARD_EXEC_PREFIX_1 "/gcc/lib/gcc/"
  9273. +#define STANDARD_STARTFILE_PREFIX_1 "/gcc/lib/"
  9274. +#define STANDARD_STARTFILE_PREFIX_2 "/gcc/lib/"
  9275. +
  9276. +/* The AmigaOS stores file names with regard to upper/lower case, but actions
  9277. +   on existing files are case independent on the standard filesystems.
  9278. +
  9279. +   A good example of where this causes problems is the conflict between the C
  9280. +   include file <string.h> and the C++ include file <String.h>, where the C++
  9281. +   include file dir is searched first and thus causes includes of <string.h>
  9282. +   to include <String.h> instead.
  9283. +
  9284. +   In order to solve this problem we define the macro OPEN_CASE_SENSITIVE as
  9285. +   the name of the function that takes the same args as open() and does case
  9286. +   dependent opens.  */
  9287. +
  9288. +#define OPEN_CASE_SENSITIVE(NAME, FLAGS, MODE) open ((NAME), (FLAGS) | O_CASE, (MODE))
  9289. +
  9290. +/* On the AmigaOS, there are two pathname separators, '/' (DIR_SEPARATOR)
  9291. +   and ':' (VOL_SEPARATOR).  DIR_SEPARATOR defaults to the correct
  9292. +   character, so we don't have to explicitly set it.  */
  9293. +
  9294. +#define DIR_SEPARATOR '/'
  9295. +#define VOL_SEPARATOR ':'
  9296. +
  9297. +/* Do *not* use this define, otherwise Amiga-devicenames ('DEV:') won't 
  9298. +   work:  */
  9299. +// #define DIR_SEPARATOR_2 VOL_SEPARATOR
  9300. +
  9301. +
  9302. +/* Determine whether a '\0'-terminated file name is absolute or not.
  9303. +
  9304. +   This checks for both, '/' as the first character, since we're running under
  9305. +   ixemul.library which provides for this unix'ism, and for the usual 
  9306. +   logical-terminator, ':', somewhere in the filename.  */
  9307. +
  9308. +#define FILE_NAME_ABSOLUTE_P(NAME) ((NAME)[0] == '/' || index ((NAME), ':'))
  9309. +
  9310. +/* Like the above, but the file name is not '\0'-terminated.  */
  9311. +
  9312. +#define FILE_NAME_ABSOLUTE_N_P(NAME, LEN) amigaos_file_name_absolute_n ((NAME), (LEN))
  9313. +
  9314. +/* Return the file name part of the path name.  */
  9315. +
  9316. +#define FILE_NAME_NONDIRECTORY(NAME)                    \
  9317. +  (rindex ((NAME), '/') ? rindex ((NAME), '/') + 1            \
  9318. +            : (rindex ((NAME), ':') ? rindex ((NAME), ':') + 1 \
  9319. +                        : (NAME)))
  9320. +
  9321. +/* Generate the name of the cross reference file.  */
  9322. +
  9323. +#define XREF_FILE_NAME(BUFF, NAME)                    \
  9324. +do                                    \
  9325. +  {                                    \
  9326. +    char *filesrc, *filedst;                        \
  9327. +    strcpy ((BUFF), (NAME));                        \
  9328. +    filesrc = FILE_NAME_NONDIRECTORY (NAME);                \
  9329. +    filedst = (BUFF) + (filesrc - (NAME));                \
  9330. +    sprintf (filedst, ".%s.gxref", filesrc);                \
  9331. +  }                                    \
  9332. +while (0)
  9333. +
  9334. +/* olsen: we don't want to link with libgcc by default */
  9335. +#define LIBGCC_SPEC ""
  9336. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/amigaos.c gcc-2.95.3/gcc/config/rs6000/amigaos.c
  9337. --- gcc-2.95.3-orig/gcc/config/rs6000/amigaos.c    1970-01-01 01:00:00.000000000 +0100
  9338. +++ gcc-2.95.3/gcc/config/rs6000/amigaos.c    2003-12-02 17:50:55.000000000 +0100
  9339. @@ -0,0 +1,269 @@
  9340. +/* Subroutines used for code generation on Amiga OS 4
  9341. +   Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  9342. +   Free Software Foundation, Inc.
  9343. +   Contributed by Thomas Frieden (ThomasF@hyperion-entertainment.com)
  9344. +
  9345. +This file is part of GNU CC.
  9346. +
  9347. +GNU CC is free software; you can redistribute it and/or modify
  9348. +it under the terms of the GNU General Public License as published by
  9349. +the Free Software Foundation; either version 2, or (at your option)
  9350. +any later version.
  9351. +
  9352. +GNU CC is distributed in the hope that it will be useful,
  9353. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  9354. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9355. +GNU General Public License for more details.
  9356. +
  9357. +You should have received a copy of the GNU General Public License
  9358. +along with GNU CC; see the file COPYING.  If not, write to
  9359. +the Free Software Foundation, 59 Temple Place - Suite 330,
  9360. +Boston, MA 02111-1307, USA.  */
  9361. +
  9362. +#include "config.h"
  9363. +#include "system.h"
  9364. +#include "rtl.h"
  9365. +#include "regs.h"
  9366. +#include "hard-reg-set.h"
  9367. +#include "real.h"
  9368. +#include "insn-config.h"
  9369. +#include "conditions.h"
  9370. +#include "insn-flags.h"
  9371. +#include "insn-attr.h"
  9372. +#include "flags.h"
  9373. +#include "recog.h"
  9374. +#include "expr.h"
  9375. +#include "obstack.h"
  9376. +#include "tree.h"
  9377. +#include "except.h"
  9378. +#include "function.h"
  9379. +#include "output.h"
  9380. +#include "toplev.h"
  9381. +
  9382. +#undef DEBUG
  9383. +#ifdef DEBUG
  9384. +#define dprintf(FORMAT, ARG...)              \
  9385. +printf("%s: ", __PRETTY_FUNCTION__);        \
  9386. +printf(FORMAT , ## ARG)
  9387. +#else
  9388. +#define dprintf(FORMAT, ARG...)
  9389. +#endif
  9390. +
  9391. +
  9392. +void
  9393. +amigaos_init_cumulative_args (cum, fntype, libname, incoming)
  9394. +     CUMULATIVE_ARGS *cum;
  9395. +     tree fntype;
  9396. +     rtx libname ATTRIBUTE_UNUSED;
  9397. +     int incoming;
  9398. +{
  9399. +    dprintf("enter\n");
  9400. +    init_cumulative_args(cum, fntype, libname, incoming);
  9401. +
  9402. +    /* Check if either libcall or linear varargs, set appropriate cookie */
  9403. +    if (fntype && (lookup_attribute("libcall", TYPE_ATTRIBUTES (fntype))))
  9404. +        cum->call_cookie |= CALL_LINEARVARARGS;
  9405. +
  9406. +    if (fntype && (lookup_attribute("linearvarargs", TYPE_ATTRIBUTES (fntype))))
  9407. +        cum->call_cookie |= CALL_LINEARVARARGS;
  9408. +
  9409. +    dprintf("exit\n");
  9410. +}
  9411. +
  9412. +
  9413. +void
  9414. +amigaos_function_arg_advance (cum, mode, type, named)
  9415. +     CUMULATIVE_ARGS *cum;
  9416. +     enum machine_mode mode;
  9417. +     tree type;
  9418. +     int named;
  9419. +{
  9420. +    dprintf("enter\n");
  9421. +    function_arg_advance(cum, mode, type, named);
  9422. +    if (cum->call_cookie & CALL_LINEARVARARGS && cum->sysv_gregno + cum->fregno - GP_ARG_MIN_REG - FP_ARG_MIN_REG > cum->orig_nargs)
  9423. +    {
  9424. +    cum->sysv_gregno = GP_ARG_MAX_REG + 1;
  9425. +    cum->fregno = FP_ARG_V4_MAX_REG + 1;
  9426. +    }
  9427. +    dprintf("exit\n");
  9428. +}
  9429. +
  9430. +
  9431. +struct rtx_def *
  9432. +amigaos_function_arg (cum, mode, type, named)
  9433. +     CUMULATIVE_ARGS *cum;
  9434. +     enum machine_mode mode;
  9435. +     tree type;
  9436. +     int named;
  9437. +{
  9438. +    struct rtx_def *res = 0;
  9439. +
  9440. +    dprintf("enter\n");
  9441. +    if (mode == VOIDmode && cum->call_cookie & CALL_LINEARVARARGS)
  9442. +    res = GEN_INT (cum->call_cookie);
  9443. +    else
  9444. +    res =  function_arg (cum, mode, type, named);
  9445. +
  9446. +    dprintf("exit\n");
  9447. +
  9448. +    return res;
  9449. +}
  9450. +
  9451. +
  9452. +
  9453. +void
  9454. +amigaos_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
  9455. +     CUMULATIVE_ARGS *cum;
  9456. +     enum machine_mode mode;
  9457. +     tree type;
  9458. +     int *pretend_size;
  9459. +     int no_rtl;
  9460. +
  9461. +{
  9462. +  CUMULATIVE_ARGS next_cum;
  9463. +  int reg_size = TARGET_32BIT ? 4 : 8;
  9464. +  rtx save_area;
  9465. +  int first_reg_offset;
  9466. +
  9467. +  dprintf("enter\n");
  9468. +  if (cum->call_cookie & CALL_LINEARVARARGS)
  9469. +  {
  9470. +      tree fntype;
  9471. +      int stdarg_p;
  9472. +      
  9473. +      fntype = TREE_TYPE (current_function_decl);
  9474. +      stdarg_p = (TYPE_ARG_TYPES (fntype) != 0
  9475. +          && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
  9476. +              != void_type_node));
  9477. +      
  9478. +      /* For varargs, we do not want to skip the dummy va_dcl argument.
  9479. +     For stdargs, we do want to skip the last named argument.  */
  9480. +      next_cum = *cum;
  9481. +      if (stdarg_p)
  9482. +      function_arg_advance (&next_cum, mode, type, 1);
  9483. +      
  9484. +      /* Indicate to allocate space on the stack for varargs save area.  */
  9485. +      /* ??? Does this really have to be located at a magic spot on the
  9486. +     stack, or can we allocate this with assign_stack_local instead.  */
  9487. +      rs6000_sysv_varargs_p = 1;
  9488. +      if (! no_rtl)
  9489. +      save_area = plus_constant (virtual_stack_vars_rtx,
  9490. +                     - RS6000_VARARGS_SIZE);
  9491. +
  9492. +      first_reg_offset = next_cum.sysv_gregno - GP_ARG_MIN_REG;
  9493. +
  9494. +  }
  9495. +  else
  9496. +  {
  9497. +      setup_incoming_varargs(cum, mode, type, pretend_size, no_rtl);
  9498. +  }
  9499. +
  9500. +  dprintf("exit\n");
  9501. +
  9502. +}
  9503. +
  9504. +
  9505. +struct rtx_def *
  9506. +amigaos_expand_builtin_saveregs (args)
  9507. +     tree args ATTRIBUTE_UNUSED;
  9508. +{
  9509. +  rtx block, mem_gpr_fpr, mem_reg_save_area, mem_overflow, tmp;
  9510. +  tree fntype;
  9511. +  int stdarg_p;
  9512. +  HOST_WIDE_INT words, gpr, fpr;
  9513. +  struct rtx_def *res;
  9514. +
  9515. +  dprintf("enter\n");
  9516. +
  9517. +  if (current_function_args_info.call_cookie & CALL_LINEARVARARGS)
  9518. +  {
  9519. +      HOST_WIDE_INT bits;
  9520. +
  9521. +      fntype = TREE_TYPE (current_function_decl);
  9522. +      stdarg_p = (TYPE_ARG_TYPES (fntype) != 0
  9523. +          && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
  9524. +              != void_type_node));
  9525. +      
  9526. +      /* Allocate the va_list constructor.  */
  9527. +      block = assign_stack_local (BLKmode, 3 * UNITS_PER_WORD, BITS_PER_WORD);
  9528. +      RTX_UNCHANGING_P (block) = 1;
  9529. +      RTX_UNCHANGING_P (XEXP (block, 0)) = 1;
  9530. +      
  9531. +      mem_gpr_fpr = change_address (block, word_mode, XEXP (block, 0));
  9532. +      mem_overflow = change_address (block, ptr_mode,
  9533. +                     plus_constant (XEXP (block, 0),
  9534. +                                                UNITS_PER_WORD));
  9535. +      /*mem_reg_save_area = change_address (block, ptr_mode,
  9536. +    plus_constant (XEXP (block, 0),
  9537. +    2 * UNITS_PER_WORD));*/
  9538. +      
  9539. +      /* Construct the two characters of `gpr' and `fpr' as a unit.  */
  9540. +      words = current_function_args_info.words;
  9541. +      gpr = current_function_args_info.sysv_gregno - GP_ARG_MIN_REG;
  9542. +      
  9543. +      /* Varargs has the va_dcl argument, but we don't count it.  */
  9544. +      if (!stdarg_p)
  9545. +      {
  9546. +      if (gpr > GP_ARG_NUM_REG)
  9547. +          words -= 1;
  9548. +      }
  9549. +      
  9550. +      bits = (GP_ARG_MAX_REG - GP_ARG_MIN_REG + 1) << 8
  9551. +      | (FP_ARG_MAX_REG - FP_ARG_MIN_REG + 1);
  9552. +      if (HOST_BITS_PER_WIDE_INT >= BITS_PER_WORD)
  9553. +      tmp = GEN_INT (bits << (BITS_PER_WORD - 16));
  9554. +      else
  9555. +      {
  9556. +      bits <<= BITS_PER_WORD - HOST_BITS_PER_WIDE_INT - 16;
  9557. +      tmp = immed_double_const (0, bits, word_mode);
  9558. +      }
  9559. +      
  9560. +      emit_move_insn (mem_gpr_fpr, tmp);
  9561. +      
  9562. +      /* Find the overflow area.  */
  9563. +      tmp = expand_binop (Pmode, add_optab, virtual_incoming_args_rtx,
  9564. +              GEN_INT (words * UNITS_PER_WORD),
  9565. +              mem_overflow, 0, OPTAB_WIDEN);
  9566. +      if (tmp != mem_overflow)
  9567. +      emit_move_insn (mem_overflow, tmp);
  9568. +      
  9569. +      /*tmp = expand_binop (Pmode, add_optab, virtual_stack_vars_rtx,
  9570. +    GEN_INT (-RS6000_VARARGS_SIZE),
  9571. +    mem_reg_save_area, 0, OPTAB_WIDEN);
  9572. +    if (tmp != mem_reg_save_area)
  9573. +    emit_move_insn (mem_reg_save_area, tmp);*/
  9574. +      
  9575. +      /* Return the address of the va_list constructor.  */
  9576. +      res = XEXP (block, 0);
  9577. +  }
  9578. +  else
  9579. +  {
  9580. +      res = expand_builtin_saveregs(args);
  9581. +  }
  9582. +
  9583. +  dprintf("exit\n");
  9584. +  return res;
  9585. +}
  9586. +
  9587. +
  9588. +int amigaos_valid_type_attribute_p (type, attributes, identifier, args)
  9589. +     tree type;
  9590. +     tree attributes ATTRIBUTE_UNUSED;
  9591. +     tree identifier;
  9592. +     tree args;
  9593. +{
  9594. +
  9595. +    if (TREE_CODE (type) != FUNCTION_TYPE
  9596. +    && TREE_CODE (type) != FIELD_DECL
  9597. +    && TREE_CODE (type) != TYPE_DECL)
  9598. +    return 0;
  9599. +
  9600. +    if (is_attribute_p ("libcall", identifier))
  9601. +    return (args == NULL_TREE);
  9602. +    
  9603. +    if (is_attribute_p ("linearvarargs", identifier))
  9604. +    return (args == NULL_TREE);
  9605. +
  9606. +    return rs6000_valid_type_attribute_p(type, attributes, identifier, args);
  9607. +}
  9608. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/amigaos.h gcc-2.95.3/gcc/config/rs6000/amigaos.h
  9609. --- gcc-2.95.3-orig/gcc/config/rs6000/amigaos.h    1970-01-01 01:00:00.000000000 +0100
  9610. +++ gcc-2.95.3/gcc/config/rs6000/amigaos.h    2003-12-31 17:12:22.000000000 +0100
  9611. @@ -0,0 +1,134 @@
  9612. +/* Definitions of target machine for GNU compiler, for AmigaOS.
  9613. +   Copyright (C) 1997 Free Software Foundation, Inc.
  9614. +
  9615. +
  9616. +This file is part of GNU CC.
  9617. +
  9618. +GNU CC is free software; you can redistribute it and/or modify
  9619. +it under the terms of the GNU General Public License as published by
  9620. +the Free Software Foundation; either version 2, or (at your option)
  9621. +any later version.
  9622. +
  9623. +GNU CC is distributed in the hope that it will be useful,
  9624. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  9625. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9626. +GNU General Public License for more details.
  9627. +
  9628. +You should have received a copy of the GNU General Public License
  9629. +along with GNU CC; see the file COPYING.  If not, write to
  9630. +the Free Software Foundation, 59 Temple Place - Suite 330,
  9631. +Boston, MA 02111-1307, USA.  */
  9632. +
  9633. +
  9634. +#include "rs6000/sysv4.h"
  9635. +
  9636. +/* Don't assume anything about the header files. */
  9637. +#define NO_IMPLICIT_EXTERN_C
  9638. +
  9639. +#undef MD_EXEC_PREFIX
  9640. +#undef MD_STARTFILE_PREFIX
  9641. +
  9642. +/* Make CPU default to 604e. FIXME: Make this 750 later */
  9643. +#undef PROCESSOR_DEFAULT
  9644. +#define PROCESSOR_DEFAULT PROCESSOR_PPC604e
  9645. +
  9646. +#undef DEFAULT_ABI
  9647. +#define DEFAULT_ABI ABI_V4
  9648. +
  9649. +/* Make most of the definitions from other compilers available */
  9650. +#undef CPP_PREDEFINES
  9651. +#define CPP_PREDEFINES \
  9652. + "-DPPC -D__ELF__ -Dpowerpc -Acpu(powerpc) -Amachine(powerpc) " \
  9653. + "-DAMIGA -DAMIGAOS -DAMIGAOS4 -D__amigaos__ -D__amiga__ -D__amigaos4__ " \
  9654. + "-Damiga -Damigaos -Damigaos4" 
  9655. +
  9656. +
  9657. +#ifdef __amigaos4__
  9658. +#undef CPP_OS_DEFAULT_SPEC
  9659. +#define CPP_OS_DEFAULT_SPEC "-I/gcc/local/include -I/gcc/os-include"
  9660. +#else
  9661. +#undef CPP_OS_DEFAULT_SPEC
  9662. +#define CPP_OS_DEFAULT_SPEC "-I/usr/local/amiga/ppc-amigaos/local/include -I/usr/local/amiga/ppc-amigaos/local/os-include"
  9663. +#endif
  9664. +
  9665. +#ifdef __amigaos4__
  9666. +#undef    LINK_OS_DEFAULT_SPEC
  9667. +#define    LINK_OS_DEFAULT_SPEC "-L/gcc/local/lib"
  9668. +#else
  9669. +#undef    LINK_OS_DEFAULT_SPEC
  9670. +#define    LINK_OS_DEFAULT_SPEC "-L/usr/local/amiga/ppc-amigaos/local/lib"
  9671. +#endif
  9672. +
  9673. +#undef LINK_SPEC
  9674. +#define LINK_SPEC "\
  9675. +--defsym __amigaos4__=1 \
  9676. +-q -n -d %{h*} %{v:-V} %{G*} \
  9677. +%{Wl,*:%*} %{YP,*} %{R*} \
  9678. +%{Qy:} %{!Qn:-Qy} \
  9679. +%(link_target) \
  9680. +%(link_os)"
  9681. +
  9682. +#undef STARTFILE_SPEC
  9683. +#define STARTFILE_SPEC     "crtbegin.o%s %{pg:gcrt0.o%s} %{!pg:crt0.o%s} mainnb.o%s"
  9684. +
  9685. +#undef ENDFILE_SPEC
  9686. +#define ENDFILE_SPEC "crtend.o%s"
  9687. +
  9688. +#undef LIB_SPEC
  9689. +#define LIB_SPEC                                \
  9690. +"%{!unix: --start-group -lc -lamiga --end-group } "                \
  9691. +"%{unix: --start-group -lunix -lc -lamiga -lunix --end-group } "        \
  9692. +"%{auto: -lauto} " \
  9693. +"%{profile:-lc_p}%{!profile:-lc} "
  9694. +
  9695. +#undef TARGET_VERSION
  9696. +#define TARGET_VERSION fprintf (stderr, " (PowerPC AmigaOS 4)");
  9697. +
  9698. +
  9699. +#undef DEFAULT_VTABLE_THUNKS
  9700. +#ifndef USE_GNULIBC_1
  9701. +#define DEFAULT_VTABLE_THUNKS 1
  9702. +#endif
  9703. +
  9704. +#undef JUMP_TABLES_IN_TEXT_SECTION
  9705. +#define JUMP_TABLES_IN_TEXT_SECTION 0
  9706. +
  9707. +/* Used as cookie for linear vararg passing */
  9708. +#define CALL_LINEARVARARGS      0x10000000
  9709. +
  9710. +/* Prototypes */
  9711. +void amigaos_init_cumulative_args();
  9712. +void amigaos_function_arg_advance();
  9713. +struct rtx_def *amigaos_function_arg();
  9714. +void amigaos_setup_incoming_varargs();
  9715. +struct rtx_def *amigaos_expand_builtin_saveregs();
  9716. +int amigaos_valid_type_attribute_p();
  9717. +
  9718. +/* Overrides */
  9719. +#undef INIT_CUMULATIVE_ARGS
  9720. +#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
  9721. +    amigaos_init_cumulative_args(&CUM, FNTYPE, LIBNAME, FALSE)
  9722. +
  9723. +#undef INIT_CUMULATIVE_INCOMING_ARGS
  9724. +#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
  9725. +    amigaos_init_cumulative_args(&CUM, FNTYPE, LIBNAME, TRUE)
  9726. +
  9727. +#undef FUNCTION_ARG_ADVANCE
  9728. +#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)    \
  9729. +    amigaos_function_arg_advance(&CUM, MODE, TYPE, NAMED)
  9730. +
  9731. +#undef FUNCTION_ARG
  9732. +#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
  9733. +    amigaos_function_arg(&CUM, MODE, TYPE, NAMED)
  9734. +
  9735. +#undef SETUP_INCOMING_VARARGS
  9736. +#define SETUP_INCOMING_VARARGS(CUM,MODE, TYPE,PRETEND_SIZE, NO_RTL) \
  9737. +    amigaos_setup_incoming_varargs(&CUM, MODE, TYPE, &PRETEND_SIZE, NO_RTL)
  9738. +
  9739. +#undef EXPAND_BUILTIN_SAVEREGS
  9740. +#define EXPAND_BUILTIN_SAVEREGS(ARGS) \
  9741. +    amigaos_expand_builtin_saveregs(ARGS)
  9742. +
  9743. +#undef VALID_MACHINE_TYPE_ATTRIBUTE
  9744. +#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \
  9745. +    amigaos_valid_type_attribute_p(TYPE, ATTRIBUTES, NAME, ARGS)
  9746. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/amigaos.h~ gcc-2.95.3/gcc/config/rs6000/amigaos.h~
  9747. --- gcc-2.95.3-orig/gcc/config/rs6000/amigaos.h~    1970-01-01 01:00:00.000000000 +0100
  9748. +++ gcc-2.95.3/gcc/config/rs6000/amigaos.h~    2003-12-06 18:31:20.000000000 +0100
  9749. @@ -0,0 +1,123 @@
  9750. +/* Definitions of target machine for GNU compiler, for AmigaOS.
  9751. +   Copyright (C) 1997 Free Software Foundation, Inc.
  9752. +
  9753. +
  9754. +This file is part of GNU CC.
  9755. +
  9756. +GNU CC is free software; you can redistribute it and/or modify
  9757. +it under the terms of the GNU General Public License as published by
  9758. +the Free Software Foundation; either version 2, or (at your option)
  9759. +any later version.
  9760. +
  9761. +GNU CC is distributed in the hope that it will be useful,
  9762. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  9763. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9764. +GNU General Public License for more details.
  9765. +
  9766. +You should have received a copy of the GNU General Public License
  9767. +along with GNU CC; see the file COPYING.  If not, write to
  9768. +the Free Software Foundation, 59 Temple Place - Suite 330,
  9769. +Boston, MA 02111-1307, USA.  */
  9770. +
  9771. +
  9772. +#include "rs6000/sysv4.h"
  9773. +
  9774. +/* Don't assume anything about the header files. */
  9775. +#define NO_IMPLICIT_EXTERN_C
  9776. +
  9777. +#undef MD_EXEC_PREFIX
  9778. +#undef MD_STARTFILE_PREFIX
  9779. +
  9780. +/* Make CPU default to 604e. FIXME: Make this 750 later */
  9781. +#undef PROCESSOR_DEFAULT
  9782. +#define PROCESSOR_DEFAULT PROCESSOR_PPC604e
  9783. +
  9784. +#undef DEFAULT_ABI
  9785. +#define DEFAULT_ABI ABI_V4
  9786. +
  9787. +/* Make most of the definitions from other compilers available */
  9788. +#undef CPP_PREDEFINES
  9789. +#define CPP_PREDEFINES \
  9790. + "-DPPC -D__ELF__ -Dpowerpc -Acpu(powerpc) -Amachine(powerpc) " \
  9791. + "-DAMIGA -DAMIGAOS -DAMIGAOS4 -D__amigaos__ -D__amiga__ -D__amigaos4__ " \
  9792. + "-Damiga -Damigaos -Damigaos4" 
  9793. +
  9794. +
  9795. +#undef CPP_OS_DEFAULT_SPEC
  9796. +#define CPP_OS_DEFAULT_SPEC "-I/gcc/local/include -I/gcc/os-include"
  9797. +
  9798. +#undef    LINK_OS_DEFAULT_SPEC
  9799. +#define    LINK_OS_DEFAULT_SPEC "-L/gcc/local/lib"
  9800. +
  9801. +#undef LINK_SPEC
  9802. +#define LINK_SPEC "\
  9803. +--defsym __amigaos4__=1 \
  9804. +-q -n -d %{h*} %{v:-V} %{G*} \
  9805. +%{Wl,*:%*} %{YP,*} %{R*} \
  9806. +%{Qy:} %{!Qn:-Qy} \
  9807. +%(link_target) \
  9808. +%(link_os)"
  9809. +
  9810. +#undef STARTFILE_SPEC
  9811. +#define STARTFILE_SPEC     "crtbegin.o%s %{pg:gcrt0.o%s} %{!pg:crt0.o%s} mainnb.o%s"
  9812. +
  9813. +#undef ENDFILE_SPEC
  9814. +#define ENDFILE_SPEC "crtend.o%s"
  9815. +
  9816. +#undef LIB_SPEC
  9817. +#define LIB_SPEC                                \
  9818. +"%{!unix: --start-group -lc -lamiga --end-group } "                \
  9819. +"%{unix: --start-group -lunix -lc -lamiga -lunix --end-group } "        \
  9820. +"%{profile:-lc_p}%{!profile:-lc} "
  9821. +
  9822. +#undef TARGET_VERSION
  9823. +#define TARGET_VERSION fprintf (stderr, " (PowerPC AmigaOS 4)");
  9824. +
  9825. +
  9826. +#undef DEFAULT_VTABLE_THUNKS
  9827. +#ifndef USE_GNULIBC_1
  9828. +#define DEFAULT_VTABLE_THUNKS 1
  9829. +#endif
  9830. +
  9831. +#undef JUMP_TABLES_IN_TEXT_SECTION
  9832. +#define JUMP_TABLES_IN_TEXT_SECTION 0
  9833. +
  9834. +/* Used as cookie for linear vararg passing */
  9835. +#define CALL_LINEARVARARGS      0x10000000
  9836. +
  9837. +/* Prototypes */
  9838. +void amigaos_init_cumulative_args();
  9839. +void amigaos_function_arg_advance();
  9840. +struct rtx_def *amigaos_function_arg();
  9841. +void amigaos_setup_incoming_varargs();
  9842. +struct rtx_def *amigaos_expand_builtin_saveregs();
  9843. +int amigaos_valid_type_attribute_p();
  9844. +
  9845. +/* Overrides */
  9846. +#undef INIT_CUMULATIVE_ARGS
  9847. +#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
  9848. +    amigaos_init_cumulative_args(&CUM, FNTYPE, LIBNAME, FALSE)
  9849. +
  9850. +#undef INIT_CUMULATIVE_INCOMING_ARGS
  9851. +#define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \
  9852. +    amigaos_init_cumulative_args(&CUM, FNTYPE, LIBNAME, TRUE)
  9853. +
  9854. +#undef FUNCTION_ARG_ADVANCE
  9855. +#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)    \
  9856. +    amigaos_function_arg_advance(&CUM, MODE, TYPE, NAMED)
  9857. +
  9858. +#undef FUNCTION_ARG
  9859. +#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
  9860. +    amigaos_function_arg(&CUM, MODE, TYPE, NAMED)
  9861. +
  9862. +#undef SETUP_INCOMING_VARARGS
  9863. +#define SETUP_INCOMING_VARARGS(CUM,MODE, TYPE,PRETEND_SIZE, NO_RTL) \
  9864. +    amigaos_setup_incoming_varargs(&CUM, MODE, TYPE, &PRETEND_SIZE, NO_RTL)
  9865. +
  9866. +#undef EXPAND_BUILTIN_SAVEREGS
  9867. +#define EXPAND_BUILTIN_SAVEREGS(ARGS) \
  9868. +    amigaos_expand_builtin_saveregs(ARGS)
  9869. +
  9870. +#undef VALID_MACHINE_TYPE_ATTRIBUTE
  9871. +#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \
  9872. +    amigaos_valid_type_attribute_p(TYPE, ATTRIBUTES, NAME, ARGS)
  9873. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/rs6000.md gcc-2.95.3/gcc/config/rs6000/rs6000.md
  9874. --- gcc-2.95.3-orig/gcc/config/rs6000/rs6000.md    2001-01-25 15:03:35.000000000 +0100
  9875. +++ gcc-2.95.3/gcc/config/rs6000/rs6000.md    2003-12-02 17:50:54.000000000 +0100
  9876. @@ -6615,7 +6615,7 @@
  9877.  }")
  9878.  
  9879.  (define_insn "*movdi_32"
  9880. -  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,f,f,m,r,r,r,r,r")
  9881. +  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,m,r,r,r,r,r")
  9882.      (match_operand:DI 1 "input_operand" "r,m,r,f,m,f,IJK,n,G,H,F"))]
  9883.    "! TARGET_POWERPC64
  9884.     && (gpc_reg_operand (operands[0], DImode)
  9885. @@ -6627,6 +6627,7 @@
  9886.      default:
  9887.        abort ();
  9888.      case 0:
  9889. +    case 3:
  9890.        /* We normally copy the low-numbered register first.  However, if
  9891.       the first register operand 0 is the same as the second register of
  9892.       operand 1, we must copy in the opposite order.  */
  9893. @@ -6635,6 +6636,7 @@
  9894.        else
  9895.      return \"mr %0,%1\;mr %L0,%L1\";
  9896.      case 1:
  9897. +    case 4:
  9898.        /* If the low-address word is used in the address, we must load it
  9899.       last.  Otherwise, load it first.  Note that we cannot have
  9900.       auto-increment in that case since the address register is known to be
  9901. @@ -6645,13 +6647,14 @@
  9902.        else
  9903.      return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
  9904.      case 2:
  9905. +    case 5:
  9906.        return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
  9907. -    case 3:
  9908. +/*    case 3:
  9909.        return \"fmr %0,%1\";
  9910.      case 4:
  9911.        return \"lfd%U1%X1 %0,%1\";
  9912.      case 5:
  9913. -      return \"stfd%U0%X0 %1,%0\";
  9914. +      return \"stfd%U0%X0 %1,%0\";*/
  9915.      case 6:
  9916.      case 7:
  9917.      case 8:
  9918. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/rs6000.md.orig gcc-2.95.3/gcc/config/rs6000/rs6000.md.orig
  9919. --- gcc-2.95.3-orig/gcc/config/rs6000/rs6000.md.orig    1970-01-01 01:00:00.000000000 +0100
  9920. +++ gcc-2.95.3/gcc/config/rs6000/rs6000.md.orig    2003-12-02 17:50:54.000000000 +0100
  9921. @@ -0,0 +1,11008 @@
  9922. +;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
  9923. +;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
  9924. +;; 2000, 2001 Free Software Foundation, Inc.
  9925. +;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
  9926. +
  9927. +;; This file is part of GNU CC.
  9928. +
  9929. +;; GNU CC is free software; you can redistribute it and/or modify
  9930. +;; it under the terms of the GNU General Public License as published by
  9931. +;; the Free Software Foundation; either version 2, or (at your option)
  9932. +;; any later version.
  9933. +
  9934. +;; GNU CC is distributed in the hope that it will be useful,
  9935. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  9936. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9937. +;; GNU General Public License for more details.
  9938. +
  9939. +;; You should have received a copy of the GNU General Public License
  9940. +;; along with GNU CC; see the file COPYING.  If not, write to
  9941. +;; the Free Software Foundation, 59 Temple Place - Suite 330,
  9942. +;; Boston, MA 02111-1307, USA.
  9943. +
  9944. +;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
  9945. +
  9946. +;; Define an insn type attribute.  This is used in function unit delay
  9947. +;; computations.
  9948. +(define_attr "type" "integer,load,store,fpload,fpstore,imul,idiv,branch,compare,delayed_compare,fpcompare,mtjmpr,fp,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg"
  9949. +  (const_string "integer"))
  9950. +
  9951. +;; Length (in bytes).
  9952. +; '(pc)' in the following doesn't include the instruction itself; it is 
  9953. +; calculated as if the instruction had zero size.
  9954. +(define_attr "length" ""
  9955. +  (if_then_else (eq_attr "type" "branch")
  9956. +        (if_then_else (and (ge (minus (match_dup 0) (pc))
  9957. +                       (const_int -32768))
  9958. +                   (lt (minus (match_dup 0) (pc))
  9959. +                       (const_int 32764)))
  9960. +                  (const_int 8)
  9961. +                  (const_int 12))
  9962. +        (const_int 4)))
  9963. +
  9964. +;; Processor type -- this attribute must exactly match the processor_type
  9965. +;; enumeration in rs6000.h.
  9966. +
  9967. +(define_attr "cpu" "rios1,rios2,mpccore,ppc403,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"
  9968. +  (const (symbol_ref "rs6000_cpu_attr")))
  9969. +
  9970. +; (define_function_unit NAME MULTIPLICITY SIMULTANEITY
  9971. +;            TEST READY-DELAY ISSUE-DELAY [CONFLICT-LIST])
  9972. +
  9973. +; Load/Store Unit -- pure PowerPC only
  9974. +; (POWER and 601 use Integer Unit)
  9975. +(define_function_unit "lsu" 1 0
  9976. +  (and (eq_attr "type" "load")
  9977. +       (eq_attr "cpu" "mpccore,ppc603,ppc604,ppc604e,ppc620,ppc750"))
  9978. +  2 1)
  9979. +
  9980. +(define_function_unit "lsu" 1 0
  9981. +  (and (eq_attr "type" "store,fpstore")
  9982. +       (eq_attr "cpu" "mpccore,ppc603,ppc604,ppc604e,ppc620,ppc750"))
  9983. +  1 1)
  9984. +
  9985. +(define_function_unit "lsu" 1 0
  9986. +  (and (eq_attr "type" "fpload")
  9987. +       (eq_attr "cpu" "mpccore,ppc603,ppc750"))
  9988. +  2 1)
  9989. +
  9990. +(define_function_unit "lsu" 1 0
  9991. +  (and (eq_attr "type" "fpload")
  9992. +       (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
  9993. +  3 1)
  9994. +
  9995. +(define_function_unit "iu" 1 0
  9996. +  (and (eq_attr "type" "load")
  9997. +       (eq_attr "cpu" "rios1,ppc403,ppc601"))
  9998. +  2 1)
  9999. +
  10000. +(define_function_unit "iu" 1 0
  10001. +  (and (eq_attr "type" "store,fpstore")
  10002. +       (eq_attr "cpu" "rios1,ppc403,ppc601"))
  10003. +  1 1)
  10004. +
  10005. +(define_function_unit "fpu" 1 0
  10006. +  (and (eq_attr "type" "fpstore")
  10007. +       (eq_attr "cpu" "rios1,ppc601"))
  10008. +  0 1)
  10009. +
  10010. +(define_function_unit "iu" 1 0
  10011. +  (and (eq_attr "type" "fpload")
  10012. +       (eq_attr "cpu" "rios1"))
  10013. +  2 1)
  10014. +
  10015. +(define_function_unit "iu" 1 0
  10016. +  (and (eq_attr "type" "fpload")
  10017. +       (eq_attr "cpu" "ppc601"))
  10018. +  3 1)
  10019. +
  10020. +(define_function_unit "iu2" 2 0
  10021. +  (and (eq_attr "type" "load,fpload")
  10022. +       (eq_attr "cpu" "rios2"))
  10023. +  2 1)
  10024. +
  10025. +(define_function_unit "iu2" 2 0
  10026. +  (and (eq_attr "type" "store,fpstore")
  10027. +       (eq_attr "cpu" "rios2"))
  10028. +  1 1)
  10029. +
  10030. +; Integer Unit (RIOS1, PPC601, PPC603)
  10031. +(define_function_unit "iu" 1 0
  10032. +  (and (eq_attr "type" "integer")
  10033. +       (eq_attr "cpu" "rios1,mpccore,ppc403,ppc601,ppc603"))
  10034. +  1 1)
  10035. +
  10036. +(define_function_unit "iu" 1 0
  10037. +  (and (eq_attr "type" "imul")
  10038. +       (eq_attr "cpu" "ppc403"))
  10039. +  4 4)
  10040. +
  10041. +(define_function_unit "iu" 1 0
  10042. +  (and (eq_attr "type" "imul")
  10043. +       (eq_attr "cpu" "rios1,ppc601,ppc603"))
  10044. +  5 5)
  10045. +
  10046. +(define_function_unit "iu" 1 0
  10047. +  (and (eq_attr "type" "idiv")
  10048. +       (eq_attr "cpu" "rios1"))
  10049. +  19 19)
  10050. +
  10051. +(define_function_unit "iu" 1 0
  10052. +  (and (eq_attr "type" "idiv")
  10053. +       (eq_attr "cpu" "ppc403"))
  10054. +  33 33)
  10055. +
  10056. +(define_function_unit "iu" 1 0
  10057. +  (and (eq_attr "type" "idiv")
  10058. +       (eq_attr "cpu" "ppc601"))
  10059. +  36 36)
  10060. +
  10061. +(define_function_unit "iu" 1 0
  10062. +  (and (eq_attr "type" "idiv")
  10063. +       (eq_attr "cpu" "ppc603"))
  10064. +  37 36)
  10065. +
  10066. +; RIOS2 has two integer units: a primary one which can perform all
  10067. +; operations and a secondary one which is fed in lock step with the first
  10068. +; and can perform "simple" integer operations.  
  10069. +; To catch this we define a 'dummy' imuldiv-unit that is also needed
  10070. +; for the complex insns. 
  10071. +(define_function_unit "iu2" 2 0
  10072. +  (and (eq_attr "type" "integer")
  10073. +       (eq_attr "cpu" "rios2"))
  10074. +  1 1)
  10075. +
  10076. +(define_function_unit "iu2" 2 0
  10077. +  (and (eq_attr "type" "imul")
  10078. +       (eq_attr "cpu" "rios2"))
  10079. +  2 2)
  10080. +
  10081. +(define_function_unit "iu2" 2 0
  10082. +  (and (eq_attr "type" "idiv")
  10083. +       (eq_attr "cpu" "rios2"))
  10084. +  13 13)
  10085. +
  10086. +(define_function_unit "imuldiv" 1 0
  10087. +  (and (eq_attr "type" "imul")
  10088. +       (eq_attr "cpu" "rios2"))
  10089. +  2 2)
  10090. +
  10091. +(define_function_unit "imuldiv" 1 0
  10092. +  (and (eq_attr "type" "idiv")
  10093. +       (eq_attr "cpu" "rios2"))
  10094. +  13 13)
  10095. +
  10096. +; MPCCORE has separate IMUL/IDIV unit for multicycle instructions
  10097. +; Divide latency varies greatly from 2-11, use 6 as average
  10098. +(define_function_unit "imuldiv" 1 0
  10099. +  (and (eq_attr "type" "imul")
  10100. +       (eq_attr "cpu" "mpccore"))
  10101. +  2 1)
  10102. +
  10103. +(define_function_unit "imuldiv" 1 0
  10104. +  (and (eq_attr "type" "idiv")
  10105. +       (eq_attr "cpu" "mpccore"))
  10106. +  6 6)
  10107. +
  10108. +; PPC604{,e} has two units that perform integer operations
  10109. +; and one unit for divide/multiply operations (and move
  10110. +; from/to spr).
  10111. +(define_function_unit "iu2" 2 0
  10112. +  (and (eq_attr "type" "integer")
  10113. +       (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
  10114. +  1 1)
  10115. +
  10116. +(define_function_unit "imuldiv" 1 0
  10117. +  (and (eq_attr "type" "imul")
  10118. +       (eq_attr "cpu" "ppc604,ppc620"))
  10119. +  4 2)
  10120. +
  10121. +(define_function_unit "imuldiv" 1 0
  10122. +  (and (eq_attr "type" "imul")
  10123. +       (eq_attr "cpu" "ppc604e"))
  10124. +  2 1)
  10125. +
  10126. +(define_function_unit "imuldiv" 1 0
  10127. +  (and (eq_attr "type" "idiv")
  10128. +       (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
  10129. +  20 19)
  10130. +
  10131. +; PPC750 has two integer units: a primary one which can perform all
  10132. +; operations and a secondary one which is fed in lock step with the first
  10133. +; and can perform "simple" integer operations.  
  10134. +; To catch this we define a 'dummy' imuldiv-unit that is also needed
  10135. +; for the complex insns. 
  10136. +(define_function_unit "iu2" 2 0
  10137. +  (and (eq_attr "type" "integer")
  10138. +       (eq_attr "cpu" "ppc750"))
  10139. +  1 1)
  10140. +
  10141. +(define_function_unit "iu2" 2 0
  10142. +  (and (eq_attr "type" "imul")
  10143. +       (eq_attr "cpu" "ppc750"))
  10144. +  4 2)
  10145. +
  10146. +(define_function_unit "imuldiv" 1 0
  10147. +  (and (eq_attr "type" "imul")
  10148. +       (eq_attr "cpu" "ppc750"))
  10149. +  4 2)
  10150. +
  10151. +(define_function_unit "imuldiv" 1 0
  10152. +  (and (eq_attr "type" "idiv")
  10153. +       (eq_attr "cpu" "ppc750"))
  10154. +  19 19)
  10155. +
  10156. +; compare is done on integer unit, but feeds insns which
  10157. +; execute on the branch unit.
  10158. +(define_function_unit "iu" 1 0   
  10159. +  (and (eq_attr "type" "compare")
  10160. +       (eq_attr "cpu" "rios1"))
  10161. +  4 1)
  10162. +
  10163. +(define_function_unit "iu" 1 0   
  10164. +  (and (eq_attr "type" "delayed_compare")
  10165. +       (eq_attr "cpu" "rios1"))
  10166. +  5 1)
  10167. +
  10168. +(define_function_unit "iu" 1 0
  10169. +  (and (eq_attr "type" "compare,delayed_compare")
  10170. +       (eq_attr "cpu" "mpccore,ppc403,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"))
  10171. +  3 1)
  10172. +
  10173. +(define_function_unit "iu2" 2 0   
  10174. +  (and (eq_attr "type" "compare,delayed_compare")
  10175. +       (eq_attr "cpu" "rios2"))
  10176. +  3 1)
  10177. +
  10178. +(define_function_unit "iu2" 2 0
  10179. +  (and (eq_attr "type" "compare,delayed_compare")
  10180. +       (eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc750"))
  10181. +  1 1)
  10182. +
  10183. +; fp compare uses fp unit
  10184. +(define_function_unit "fpu" 1 0
  10185. +  (and (eq_attr "type" "fpcompare")
  10186. +       (eq_attr "cpu" "rios1"))
  10187. +  9 1)
  10188. +
  10189. +; rios1 and rios2 have different fpcompare delays
  10190. +(define_function_unit "fpu2" 2 0
  10191. +  (and (eq_attr "type" "fpcompare")
  10192. +       (eq_attr "cpu" "rios2"))
  10193. +  5 1)
  10194. +
  10195. +; on ppc601 and ppc603, fpcompare takes also 2 cycles from
  10196. +; the integer unit
  10197. +; here we do not define delays, just occupy the unit. The dependencies
  10198. +; will be assigned by the fpcompare definition in the fpu.
  10199. +(define_function_unit "iu" 1 0
  10200. +  (and (eq_attr "type" "fpcompare")
  10201. +       (eq_attr "cpu" "ppc601,ppc603"))
  10202. +  0 2)
  10203. +
  10204. +; fp compare uses fp unit
  10205. +(define_function_unit "fpu" 1 0
  10206. +  (and (eq_attr "type" "fpcompare")
  10207. +       (eq_attr "cpu" "ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"))
  10208. +  5 1)
  10209. +
  10210. +(define_function_unit "fpu" 1 0
  10211. +  (and (eq_attr "type" "fpcompare")
  10212. +       (eq_attr "cpu" "mpccore"))
  10213. +  1 1)
  10214. +
  10215. +(define_function_unit "bpu" 1 0
  10216. +  (and (eq_attr "type" "mtjmpr")
  10217. +       (eq_attr "cpu" "rios1,rios2"))
  10218. +  5 1)
  10219. +
  10220. +(define_function_unit "bpu" 1 0
  10221. +  (and (eq_attr "type" "mtjmpr")
  10222. +       (eq_attr "cpu" "mpccore,ppc403,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc750"))
  10223. +  4 1)
  10224. +
  10225. +; all jumps/branches are executing on the bpu, in 1 cycle, for all machines.
  10226. +(define_function_unit "bpu" 1 0
  10227. +  (eq_attr "type" "jmpreg")
  10228. +  1 1)
  10229. +
  10230. +(define_function_unit "bpu" 1 0
  10231. +  (eq_attr "type" "branch")
  10232. +  1 1)
  10233. +
  10234. +; Floating Point Unit
  10235. +(define_function_unit "fpu" 1 0
  10236. +  (and (eq_attr "type" "fp,dmul")
  10237. +       (eq_attr "cpu" "rios1"))
  10238. +  2 1)
  10239. +
  10240. +(define_function_unit "fpu" 1 0
  10241. +  (and (eq_attr "type" "fp")
  10242. +       (eq_attr "cpu" "mpccore"))
  10243. +  4 4)
  10244. +
  10245. +(define_function_unit "fpu" 1 0
  10246. +  (and (eq_attr "type" "fp")
  10247. +       (eq_attr "cpu" "ppc601"))
  10248. +  4 1)
  10249. +
  10250. +(define_function_unit "fpu" 1 0
  10251. +  (and (eq_attr "type" "fp")
  10252. +       (eq_attr "cpu" "ppc603,ppc604,ppc604e,ppc620,ppc750"))
  10253. +  3 1)
  10254. +
  10255. +(define_function_unit "fpu" 1 0
  10256. +  (and (eq_attr "type" "dmul")
  10257. +       (eq_attr "cpu" "mpccore"))
  10258. +  5 5)
  10259. +
  10260. +(define_function_unit "fpu" 1 0
  10261. +  (and (eq_attr "type" "dmul")
  10262. +       (eq_attr "cpu" "ppc601"))
  10263. +  5 2)
  10264. +
  10265. +; is this true?
  10266. +(define_function_unit "fpu" 1 0
  10267. +  (and (eq_attr "type" "dmul")
  10268. +       (eq_attr "cpu" "ppc603,ppc750"))
  10269. +  4 2)
  10270. +
  10271. +(define_function_unit "fpu" 1 0
  10272. +  (and (eq_attr "type" "dmul")
  10273. +       (eq_attr "cpu" "ppc604,ppc604e,ppc620"))
  10274. +  3 1)
  10275. +
  10276. +(define_function_unit "fpu" 1 0
  10277. +  (and (eq_attr "type" "sdiv,ddiv")
  10278. +       (eq_attr "cpu" "rios1"))
  10279. +  19 19)
  10280. +
  10281. +(define_function_unit "fpu" 1 0
  10282. +  (and (eq_attr "type" "sdiv")
  10283. +       (eq_attr "cpu" "ppc601"))
  10284. +  17 17)
  10285. +
  10286. +(define_function_unit "fpu" 1 0
  10287. +  (and (eq_attr "type" "sdiv")
  10288. +       (eq_attr "cpu" "mpccore"))
  10289. +  10 10)
  10290. +
  10291. +(define_function_unit "fpu" 1 0
  10292. +  (and (eq_attr "type" "sdiv")
  10293. +       (eq_attr "cpu" "ppc603,ppc604,ppc604e,ppc620"))
  10294. +  18 18)
  10295. +
  10296. +(define_function_unit "fpu" 1 0
  10297. +  (and (eq_attr "type" "ddiv")
  10298. +       (eq_attr "cpu" "mpccore"))
  10299. +  17 17)
  10300. +
  10301. +(define_function_unit "fpu" 1 0
  10302. +  (and (eq_attr "type" "ddiv")
  10303. +       (eq_attr "cpu" "ppc601,ppc604,ppc604e,ppc620,ppc750"))
  10304. +  31 31)
  10305. +
  10306. +(define_function_unit "fpu" 1 0
  10307. +  (and (eq_attr "type" "ddiv")
  10308. +       (eq_attr "cpu" "ppc603"))
  10309. +  33 33)
  10310. +
  10311. +(define_function_unit "fpu" 1 0
  10312. +  (and (eq_attr "type" "ssqrt")
  10313. +       (eq_attr "cpu" "ppc620"))
  10314. +  31 31)
  10315. +
  10316. +(define_function_unit "fpu" 1 0
  10317. +  (and (eq_attr "type" "dsqrt")
  10318. +       (eq_attr "cpu" "ppc620"))
  10319. +  31 31)
  10320. +
  10321. +; RIOS2 has two symmetric FPUs.
  10322. +(define_function_unit "fpu2" 2 0
  10323. +  (and (eq_attr "type" "fp")
  10324. +       (eq_attr "cpu" "rios2"))
  10325. +  2 1)
  10326. +
  10327. +(define_function_unit "fpu2" 2 0
  10328. +  (and (eq_attr "type" "dmul")
  10329. +       (eq_attr "cpu" "rios2"))
  10330. +  2 1)
  10331. +
  10332. +(define_function_unit "fpu2" 2 0
  10333. +  (and (eq_attr "type" "sdiv,ddiv")
  10334. +       (eq_attr "cpu" "rios2"))
  10335. +  17 17)
  10336. +
  10337. +(define_function_unit "fpu2" 2 0
  10338. +  (and (eq_attr "type" "ssqrt,dsqrt")
  10339. +       (eq_attr "cpu" "rios2"))
  10340. +  26 26)
  10341. +
  10342. +
  10343. +;; Start with fixed-point load and store insns.  Here we put only the more
  10344. +;; complex forms.  Basic data transfer is done later.
  10345. +
  10346. +(define_expand "zero_extendqidi2"
  10347. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  10348. +    (zero_extend:DI (match_operand:QI 1 "gpc_reg_operand" "")))]
  10349. +  "TARGET_POWERPC64"
  10350. +  "")
  10351. +
  10352. +(define_insn ""
  10353. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  10354. +    (zero_extend:DI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
  10355. +  "TARGET_POWERPC64"
  10356. +  "@
  10357. +   lbz%U1%X1 %0,%1
  10358. +   rldicl %0,%1,0,56"
  10359. +  [(set_attr "type" "load,*")])
  10360. +
  10361. +(define_insn ""
  10362. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10363. +    (compare:CC (zero_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10364. +            (const_int 0)))
  10365. +   (clobber (match_scratch:DI 2 "=r"))]
  10366. +  "TARGET_POWERPC64"
  10367. +  "rldicl. %2,%1,0,56"
  10368. +  [(set_attr "type" "compare")])
  10369. +
  10370. +(define_insn ""
  10371. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10372. +    (compare:CC (zero_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10373. +            (const_int 0)))
  10374. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10375. +    (zero_extend:DI (match_dup 1)))]
  10376. +  "TARGET_POWERPC64"
  10377. +  "rldicl. %0,%1,0,56"
  10378. +  [(set_attr "type" "compare")])
  10379. +
  10380. +(define_insn "extendqidi2"
  10381. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10382. +    (sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r")))]
  10383. +  "TARGET_POWERPC64"
  10384. +  "extsb %0,%1")
  10385. +
  10386. +(define_insn ""
  10387. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10388. +    (compare:CC (sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10389. +            (const_int 0)))
  10390. +   (clobber (match_scratch:DI 2 "=r"))]
  10391. +  "TARGET_POWERPC64"
  10392. +  "extsb. %2,%1"
  10393. +  [(set_attr "type" "compare")])
  10394. +
  10395. +(define_insn ""
  10396. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10397. +    (compare:CC (sign_extend:DI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10398. +            (const_int 0)))
  10399. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10400. +    (sign_extend:DI (match_dup 1)))]
  10401. +  "TARGET_POWERPC64"
  10402. +  "extsb. %0,%1"
  10403. +  [(set_attr "type" "compare")])
  10404. +
  10405. +(define_expand "zero_extendhidi2"
  10406. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  10407. +    (zero_extend:DI (match_operand:HI 1 "gpc_reg_operand" "")))]
  10408. +  "TARGET_POWERPC64"
  10409. +  "")
  10410. +
  10411. +(define_insn ""
  10412. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  10413. +    (zero_extend:DI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
  10414. +  "TARGET_POWERPC64"
  10415. +  "@
  10416. +   lhz%U1%X1 %0,%1
  10417. +   rldicl %0,%1,0,48"
  10418. +  [(set_attr "type" "load,*")])
  10419. +
  10420. +(define_insn ""
  10421. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10422. +    (compare:CC (zero_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10423. +            (const_int 0)))
  10424. +   (clobber (match_scratch:DI 2 "=r"))]
  10425. +  "TARGET_POWERPC64"
  10426. +  "rldicl. %2,%1,0,48"
  10427. +  [(set_attr "type" "compare")])
  10428. +
  10429. +(define_insn ""
  10430. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10431. +    (compare:CC (zero_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10432. +            (const_int 0)))
  10433. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10434. +    (zero_extend:DI (match_dup 1)))]
  10435. +  "TARGET_POWERPC64"
  10436. +  "rldicl. %0,%1,0,48"
  10437. +  [(set_attr "type" "compare")])
  10438. +
  10439. +(define_expand "extendhidi2"
  10440. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  10441. +    (sign_extend:DI (match_operand:HI 1 "gpc_reg_operand" "")))]
  10442. +  "TARGET_POWERPC64"
  10443. +  "")
  10444. +
  10445. +(define_insn ""
  10446. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  10447. +    (sign_extend:DI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
  10448. +  "TARGET_POWERPC64"
  10449. +  "@
  10450. +   lha%U1%X1 %0,%1
  10451. +   extsh %0,%1"
  10452. +  [(set_attr "type" "load,*")])
  10453. +
  10454. +(define_insn ""
  10455. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10456. +    (compare:CC (sign_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10457. +            (const_int 0)))
  10458. +   (clobber (match_scratch:DI 2 "=r"))]
  10459. +  "TARGET_POWERPC64"
  10460. +  "extsh. %2,%1"
  10461. +  [(set_attr "type" "compare")])
  10462. +
  10463. +(define_insn ""
  10464. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10465. +    (compare:CC (sign_extend:DI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10466. +            (const_int 0)))
  10467. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10468. +    (sign_extend:DI (match_dup 1)))]
  10469. +  "TARGET_POWERPC64"
  10470. +  "extsh. %0,%1"
  10471. +  [(set_attr "type" "compare")])
  10472. +
  10473. +(define_expand "zero_extendsidi2"
  10474. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  10475. +    (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "")))]
  10476. +  "TARGET_POWERPC64"
  10477. +  "")
  10478. +
  10479. +(define_insn ""
  10480. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  10481. +    (zero_extend:DI (match_operand:SI 1 "reg_or_mem_operand" "m,r")))]
  10482. +  "TARGET_POWERPC64"
  10483. +  "@
  10484. +   lwz%U1%X1 %0,%1
  10485. +   rldicl %0,%1,0,32"
  10486. +  [(set_attr "type" "load,*")])
  10487. +
  10488. +(define_insn ""
  10489. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10490. +    (compare:CC (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
  10491. +            (const_int 0)))
  10492. +   (clobber (match_scratch:DI 2 "=r"))]
  10493. +  "TARGET_POWERPC64"
  10494. +  "rldicl. %2,%1,0,32"
  10495. +  [(set_attr "type" "compare")])
  10496. +
  10497. +(define_insn ""
  10498. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10499. +    (compare:CC (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
  10500. +            (const_int 0)))
  10501. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10502. +    (zero_extend:DI (match_dup 1)))]
  10503. +  "TARGET_POWERPC64"
  10504. +  "rldicl. %0,%1,0,32"
  10505. +  [(set_attr "type" "compare")])
  10506. +
  10507. +(define_expand "extendsidi2"
  10508. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  10509. +    (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "")))]
  10510. +  "TARGET_POWERPC64"
  10511. +  "")
  10512. +
  10513. +(define_insn ""
  10514. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  10515. +    (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
  10516. +  "TARGET_POWERPC64"
  10517. +  "@
  10518. +   lwa%U1%X1 %0,%1
  10519. +   extsw %0,%1"
  10520. +  [(set_attr "type" "load,*")])
  10521. +
  10522. +(define_insn ""
  10523. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10524. +    (compare:CC (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
  10525. +            (const_int 0)))
  10526. +   (clobber (match_scratch:DI 2 "=r"))]
  10527. +  "TARGET_POWERPC64"
  10528. +  "extsw. %2,%1"
  10529. +  [(set_attr "type" "compare")])
  10530. +
  10531. +(define_insn ""
  10532. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10533. +    (compare:CC (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
  10534. +            (const_int 0)))
  10535. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  10536. +    (sign_extend:DI (match_dup 1)))]
  10537. +  "TARGET_POWERPC64"
  10538. +  "extsw. %0,%1"
  10539. +  [(set_attr "type" "compare")])
  10540. +
  10541. +(define_expand "zero_extendqisi2"
  10542. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  10543. +    (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "")))]
  10544. +  ""
  10545. +  "")
  10546. +
  10547. +(define_insn ""
  10548. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  10549. +    (zero_extend:SI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
  10550. +  ""
  10551. +  "@
  10552. +   lbz%U1%X1 %0,%1
  10553. +   {rlinm|rlwinm} %0,%1,0,0xff"
  10554. +  [(set_attr "type" "load,*")])
  10555. +
  10556. +(define_insn ""
  10557. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10558. +    (compare:CC (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10559. +            (const_int 0)))
  10560. +   (clobber (match_scratch:SI 2 "=r"))]
  10561. +  ""
  10562. +  "{andil.|andi.} %2,%1,0xff"
  10563. +  [(set_attr "type" "compare")])
  10564. +
  10565. +(define_insn ""
  10566. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10567. +    (compare:CC (zero_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10568. +            (const_int 0)))
  10569. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10570. +    (zero_extend:SI (match_dup 1)))]
  10571. +  ""
  10572. +  "{andil.|andi.} %0,%1,0xff"
  10573. +  [(set_attr "type" "compare")])
  10574. +
  10575. +(define_expand "extendqisi2"
  10576. +  [(use (match_operand:SI 0 "gpc_reg_operand" ""))
  10577. +   (use (match_operand:QI 1 "gpc_reg_operand" ""))]
  10578. +  ""
  10579. +  "
  10580. +{
  10581. +  if (TARGET_POWERPC)
  10582. +    emit_insn (gen_extendqisi2_ppc (operands[0], operands[1]));
  10583. +  else if (TARGET_POWER)
  10584. +    emit_insn (gen_extendqisi2_power (operands[0], operands[1]));
  10585. +  else
  10586. +    emit_insn (gen_extendqisi2_no_power (operands[0], operands[1]));
  10587. +  DONE;
  10588. +}")
  10589. +
  10590. +(define_insn "extendqisi2_ppc"
  10591. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10592. +    (sign_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r")))]
  10593. +  "TARGET_POWERPC"
  10594. +  "extsb %0,%1")
  10595. +
  10596. +(define_insn ""
  10597. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10598. +    (compare:CC (sign_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10599. +            (const_int 0)))
  10600. +   (clobber (match_scratch:SI 2 "=r"))]
  10601. +  "TARGET_POWERPC"
  10602. +  "extsb. %2,%1"
  10603. +  [(set_attr "type" "compare")])
  10604. +
  10605. +(define_insn ""
  10606. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10607. +    (compare:CC (sign_extend:SI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10608. +            (const_int 0)))
  10609. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10610. +    (sign_extend:SI (match_dup 1)))]
  10611. +  "TARGET_POWERPC"
  10612. +  "extsb. %0,%1"
  10613. +  [(set_attr "type" "compare")])
  10614. +
  10615. +(define_expand "extendqisi2_power"
  10616. +  [(parallel [(set (match_dup 2)
  10617. +           (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
  10618. +                  (const_int 24)))
  10619. +          (clobber (scratch:SI))])
  10620. +   (parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
  10621. +           (ashiftrt:SI (match_dup 2)
  10622. +                (const_int 24)))
  10623. +          (clobber (scratch:SI))])]
  10624. +  "TARGET_POWER"
  10625. +  "
  10626. +{ operands[1] = gen_lowpart (SImode, operands[1]);
  10627. +  operands[2] = gen_reg_rtx (SImode); }")
  10628. +
  10629. +(define_expand "extendqisi2_no_power"
  10630. +  [(set (match_dup 2)
  10631. +    (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
  10632. +           (const_int 24)))
  10633. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  10634. +    (ashiftrt:SI (match_dup 2)
  10635. +             (const_int 24)))]
  10636. +  "! TARGET_POWER && ! TARGET_POWERPC"
  10637. +  "
  10638. +{ operands[1] = gen_lowpart (SImode, operands[1]);
  10639. +  operands[2] = gen_reg_rtx (SImode); }")
  10640. +
  10641. +(define_expand "zero_extendqihi2"
  10642. +  [(set (match_operand:HI 0 "gpc_reg_operand" "")
  10643. +    (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "")))]
  10644. +  ""
  10645. +  "")
  10646. +
  10647. +(define_insn ""
  10648. +  [(set (match_operand:HI 0 "gpc_reg_operand" "=r,r")
  10649. +    (zero_extend:HI (match_operand:QI 1 "reg_or_mem_operand" "m,r")))]
  10650. +  ""
  10651. +  "@
  10652. +   lbz%U1%X1 %0,%1
  10653. +   {rlinm|rlwinm} %0,%1,0,0xff"
  10654. +  [(set_attr "type" "load,*")])
  10655. +
  10656. +(define_insn ""
  10657. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10658. +    (compare:CC (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10659. +            (const_int 0)))
  10660. +   (clobber (match_scratch:HI 2 "=r"))]
  10661. +  ""
  10662. +  "{andil.|andi.} %2,%1,0xff"
  10663. +  [(set_attr "type" "compare")])
  10664. +
  10665. +(define_insn ""
  10666. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10667. +    (compare:CC (zero_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10668. +            (const_int 0)))
  10669. +   (set (match_operand:HI 0 "gpc_reg_operand" "=r")
  10670. +    (zero_extend:HI (match_dup 1)))]
  10671. +  ""
  10672. +  "{andil.|andi.} %0,%1,0xff"
  10673. +  [(set_attr "type" "compare")])
  10674. +
  10675. +(define_expand "extendqihi2"
  10676. +  [(use (match_operand:HI 0 "gpc_reg_operand" ""))
  10677. +   (use (match_operand:QI 1 "gpc_reg_operand" ""))]
  10678. +  ""
  10679. +  "
  10680. +{
  10681. +  if (TARGET_POWERPC)
  10682. +    emit_insn (gen_extendqihi2_ppc (operands[0], operands[1]));
  10683. +  else if (TARGET_POWER)
  10684. +    emit_insn (gen_extendqihi2_power (operands[0], operands[1]));
  10685. +  else
  10686. +    emit_insn (gen_extendqihi2_no_power (operands[0], operands[1]));
  10687. +  DONE;
  10688. +}")
  10689. +
  10690. +(define_insn "extendqihi2_ppc"
  10691. +  [(set (match_operand:HI 0 "gpc_reg_operand" "=r")
  10692. +    (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r")))]
  10693. +  "TARGET_POWERPC"
  10694. +  "extsb %0,%1")
  10695. +
  10696. +(define_insn ""
  10697. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10698. +    (compare:CC (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10699. +            (const_int 0)))
  10700. +   (clobber (match_scratch:HI 2 "=r"))]
  10701. +  "TARGET_POWERPC"
  10702. +  "extsb. %2,%1"
  10703. +  [(set_attr "type" "compare")])
  10704. +
  10705. +(define_insn ""
  10706. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10707. +    (compare:CC (sign_extend:HI (match_operand:QI 1 "gpc_reg_operand" "r"))
  10708. +            (const_int 0)))
  10709. +   (set (match_operand:HI 0 "gpc_reg_operand" "=r")
  10710. +    (sign_extend:HI (match_dup 1)))]
  10711. +  "TARGET_POWERPC"
  10712. +  "extsb. %0,%1"
  10713. +  [(set_attr "type" "compare")])
  10714. +
  10715. +(define_expand "extendqihi2_power"
  10716. +  [(parallel [(set (match_dup 2)
  10717. +           (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
  10718. +                  (const_int 24)))
  10719. +          (clobber (scratch:SI))])
  10720. +   (parallel [(set (match_operand:HI 0 "gpc_reg_operand" "")
  10721. +           (ashiftrt:SI (match_dup 2)
  10722. +                (const_int 24)))
  10723. +          (clobber (scratch:SI))])]
  10724. +  "TARGET_POWER"
  10725. +  "
  10726. +{ operands[0] = gen_lowpart (SImode, operands[0]);
  10727. +  operands[1] = gen_lowpart (SImode, operands[1]);
  10728. +  operands[2] = gen_reg_rtx (SImode); }")
  10729. +
  10730. +(define_expand "extendqihi2_no_power"
  10731. +  [(set (match_dup 2)
  10732. +    (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")
  10733. +           (const_int 24)))
  10734. +   (set (match_operand:HI 0 "gpc_reg_operand" "")
  10735. +    (ashiftrt:SI (match_dup 2)
  10736. +             (const_int 24)))]
  10737. +  "! TARGET_POWER && ! TARGET_POWERPC"
  10738. +  "
  10739. +{ operands[0] = gen_lowpart (SImode, operands[0]);
  10740. +  operands[1] = gen_lowpart (SImode, operands[1]);
  10741. +  operands[2] = gen_reg_rtx (SImode); }")
  10742. +
  10743. +(define_expand "zero_extendhisi2"
  10744. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  10745. +    (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "")))]
  10746. +  ""
  10747. +  "")
  10748. +
  10749. +(define_insn ""
  10750. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  10751. +    (zero_extend:SI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
  10752. +  ""
  10753. +  "@
  10754. +   lhz%U1%X1 %0,%1
  10755. +   {rlinm|rlwinm} %0,%1,0,0xffff"
  10756. +  [(set_attr "type" "load,*")])
  10757. +
  10758. +(define_insn ""
  10759. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10760. +    (compare:CC (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10761. +            (const_int 0)))
  10762. +   (clobber (match_scratch:SI 2 "=r"))]
  10763. +  ""
  10764. +  "{andil.|andi.} %2,%1,0xffff"
  10765. +  [(set_attr "type" "compare")])
  10766. +
  10767. +(define_insn ""
  10768. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10769. +    (compare:CC (zero_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10770. +            (const_int 0)))
  10771. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10772. +    (zero_extend:SI (match_dup 1)))]
  10773. +  ""
  10774. +  "{andil.|andi.} %0,%1,0xffff"
  10775. +  [(set_attr "type" "compare")])
  10776. +
  10777. +(define_expand "extendhisi2"
  10778. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  10779. +    (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "")))]
  10780. +  ""
  10781. +  "")
  10782. +
  10783. +(define_insn ""
  10784. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  10785. +    (sign_extend:SI (match_operand:HI 1 "reg_or_mem_operand" "m,r")))]
  10786. +  ""
  10787. +  "@
  10788. +   lha%U1%X1 %0,%1
  10789. +   {exts|extsh} %0,%1"
  10790. +  [(set_attr "type" "load,*")])
  10791. +
  10792. +(define_insn ""
  10793. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  10794. +    (compare:CC (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10795. +            (const_int 0)))
  10796. +   (clobber (match_scratch:SI 2 "=r"))]
  10797. +  ""
  10798. +  "{exts.|extsh.} %2,%1"
  10799. +  [(set_attr "type" "compare")])
  10800. +
  10801. +(define_insn ""
  10802. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  10803. +    (compare:CC (sign_extend:SI (match_operand:HI 1 "gpc_reg_operand" "r"))
  10804. +            (const_int 0)))
  10805. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10806. +    (sign_extend:SI (match_dup 1)))]
  10807. +  ""
  10808. +  "{exts.|extsh.} %0,%1"
  10809. +  [(set_attr "type" "compare")])
  10810. +
  10811. +;; Fixed-point arithmetic insns.
  10812. +
  10813. +;; Discourage ai/addic because of carry but provide it in an alternative
  10814. +;; allowing register zero as source.
  10815. +(define_expand "addsi3"
  10816. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  10817. +    (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
  10818. +         (match_operand:SI 2 "reg_or_cint_operand" "")))]
  10819. +  ""
  10820. +  "
  10821. +{
  10822. +  if (GET_CODE (operands[2]) == CONST_INT
  10823. +        && ! add_operand (operands[2], SImode))
  10824. +    {
  10825. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  10826. +         ? operands[0] : gen_reg_rtx (SImode));
  10827. +
  10828. +      HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
  10829. +      HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
  10830. +
  10831. +      if (low & 0x8000)
  10832. +        high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
  10833. +
  10834. +      emit_insn (gen_addsi3 (tmp, operands[1], GEN_INT (high)));
  10835. +      emit_insn (gen_addsi3 (operands[0], tmp, GEN_INT (low)));
  10836. +      DONE;
  10837. +    }
  10838. +}")
  10839. +
  10840. +(define_insn "*addsi3_internal1"
  10841. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,?r,r")
  10842. +    (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,b,r,b")
  10843. +         (match_operand:SI 2 "add_operand" "r,I,I,L")))]
  10844. +  ""
  10845. +  "@
  10846. +   {cax|add} %0,%1,%2
  10847. +   {cal %0,%2(%1)|addi %0,%1,%2}
  10848. +   {ai|addic} %0,%1,%2
  10849. +   {cau|addis} %0,%1,%v2"
  10850. +  [(set_attr "length" "4,4,4,4")])
  10851. +
  10852. +(define_insn "*addsi3_internal2"
  10853. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,?y,?y")
  10854. +    (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r")
  10855. +                 (match_operand:SI 2 "reg_or_short_operand" "r,I,r,I"))
  10856. +            (const_int 0)))
  10857. +   (clobber (match_scratch:SI 3 "=r,r,r,r"))]
  10858. +  "! TARGET_POWERPC64"
  10859. +  "@
  10860. +   {cax.|add.} %3,%1,%2
  10861. +   {ai.|addic.} %3,%1,%2
  10862. +   #
  10863. +   #"
  10864. +  [(set_attr "type" "compare")
  10865. +   (set_attr "length" "4,4,8,8")])
  10866. +
  10867. +(define_split
  10868. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  10869. +    (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
  10870. +                 (match_operand:SI 2 "reg_or_short_operand" ""))
  10871. +            (const_int 0)))
  10872. +   (clobber (match_scratch:SI 3 ""))]
  10873. +  "! TARGET_POWERPC64 && reload_completed"
  10874. +  [(set (match_dup 3)
  10875. +    (plus:SI (match_dup 1)
  10876. +         (match_dup 2)))
  10877. +   (set (match_dup 0)
  10878. +    (compare:CC (match_dup 3)
  10879. +            (const_int 0)))]
  10880. +  "")
  10881. +
  10882. +(define_insn "*addsi3_internal3"
  10883. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,?y,?y")
  10884. +    (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r")
  10885. +                 (match_operand:SI 2 "reg_or_short_operand" "r,I,r,I"))
  10886. +            (const_int 0)))
  10887. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
  10888. +    (plus:SI (match_dup 1)
  10889. +         (match_dup 2)))]
  10890. +  "! TARGET_POWERPC64"
  10891. +  "@
  10892. +   {cax.|add.} %0,%1,%2
  10893. +   {ai.|addic.} %0,%1,%2
  10894. +   #
  10895. +   #"
  10896. +  [(set_attr "type" "compare")
  10897. +   (set_attr "length" "4,4,8,8")])
  10898. +
  10899. +(define_split
  10900. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  10901. +    (compare:CC (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
  10902. +                 (match_operand:SI 2 "reg_or_short_operand" ""))
  10903. +            (const_int 0)))
  10904. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  10905. +    (plus:SI (match_dup 1) (match_dup 2)))]
  10906. +  "! TARGET_POWERPC64 && reload_completed"
  10907. +  [(set (match_dup 0)
  10908. +    (plus:SI (match_dup 1)
  10909. +         (match_dup 2)))
  10910. +   (set (match_dup 3)
  10911. +    (compare:CC (match_dup 0)
  10912. +            (const_int 0)))]
  10913. +  "")
  10914. +
  10915. +;; Split an add that we can't do in one insn into two insns, each of which
  10916. +;; does one 16-bit part.  This is used by combine.  Note that the low-order
  10917. +;; add should be last in case the result gets used in an address.
  10918. +
  10919. +(define_split
  10920. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  10921. +    (plus:SI (match_operand:SI 1 "gpc_reg_operand" "")
  10922. +         (match_operand:SI 2 "non_add_cint_operand" "")))]
  10923. +  ""
  10924. +  [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
  10925. +   (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
  10926. +"
  10927. +{
  10928. +  HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
  10929. +  HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
  10930. +
  10931. +  if (low & 0x8000)
  10932. +    high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
  10933. +
  10934. +  operands[3] = GEN_INT (high);
  10935. +  operands[4] = GEN_INT (low);
  10936. +}")
  10937. +
  10938. +(define_insn "one_cmplsi2"
  10939. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10940. +    (not:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
  10941. +  ""
  10942. +  "nor %0,%1,%1")
  10943. +
  10944. +(define_insn ""
  10945. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  10946. +    (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
  10947. +            (const_int 0)))
  10948. +   (clobber (match_scratch:SI 2 "=r,r"))]
  10949. +  "! TARGET_POWERPC64"
  10950. +  "@
  10951. +   nor. %2,%1,%1
  10952. +   #"
  10953. +  [(set_attr "type" "compare")
  10954. +   (set_attr "length" "4,8")])
  10955. +
  10956. +(define_split
  10957. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  10958. +    (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  10959. +            (const_int 0)))
  10960. +   (clobber (match_scratch:SI 2 ""))]
  10961. +  "! TARGET_POWERPC64 && reload_completed"
  10962. +  [(set (match_dup 2)
  10963. +    (not:SI (match_dup 1)))
  10964. +   (set (match_dup 0)
  10965. +    (compare:CC (match_dup 2)
  10966. +            (const_int 0)))]
  10967. +  "")
  10968. +
  10969. +(define_insn ""
  10970. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y")
  10971. +    (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
  10972. +            (const_int 0)))
  10973. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  10974. +    (not:SI (match_dup 1)))]
  10975. +  "! TARGET_POWERPC64"
  10976. +  "@
  10977. +   nor. %0,%1,%1
  10978. +   #"
  10979. +  [(set_attr "type" "compare")
  10980. +   (set_attr "length" "4,8")])
  10981. +
  10982. +(define_split
  10983. +  [(set (match_operand:CC 2 "cc_reg_not_cr0_operand" "")
  10984. +    (compare:CC (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  10985. +            (const_int 0)))
  10986. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10987. +    (not:SI (match_dup 1)))]
  10988. +  "! TARGET_POWERPC64 && reload_completed"
  10989. +  [(set (match_dup 0)
  10990. +    (not:SI (match_dup 1)))
  10991. +   (set (match_dup 2)
  10992. +    (compare:CC (match_dup 0)
  10993. +            (const_int 0)))]
  10994. +  "")
  10995. +
  10996. +(define_insn ""
  10997. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  10998. +    (minus:SI (match_operand:SI 1 "reg_or_short_operand" "rI")
  10999. +          (match_operand:SI 2 "gpc_reg_operand" "r")))]
  11000. +  "! TARGET_POWERPC"
  11001. +  "{sf%I1|subf%I1c} %0,%2,%1")
  11002. +
  11003. +(define_insn ""
  11004. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  11005. +    (minus:SI (match_operand:SI 1 "reg_or_short_operand" "r,I")
  11006. +          (match_operand:SI 2 "gpc_reg_operand" "r,r")))]
  11007. +  "TARGET_POWERPC"
  11008. +  "@
  11009. +   subf %0,%2,%1
  11010. +   subfic %0,%2,%1")
  11011. +
  11012. +(define_insn ""
  11013. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  11014. +    (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  11015. +                  (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  11016. +            (const_int 0)))
  11017. +   (clobber (match_scratch:SI 3 "=r,r"))]
  11018. +  "! TARGET_POWERPC"
  11019. +  "@
  11020. +   {sf.|subfc.} %3,%2,%1
  11021. +   #"
  11022. +  [(set_attr "type" "compare")
  11023. +   (set_attr "length" "4,8")])
  11024. +
  11025. +(define_insn ""
  11026. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  11027. +    (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  11028. +                  (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  11029. +            (const_int 0)))
  11030. +   (clobber (match_scratch:SI 3 "=r,r"))]
  11031. +  "TARGET_POWERPC && ! TARGET_POWERPC64"
  11032. +  "@
  11033. +   subf. %3,%2,%1
  11034. +   #"
  11035. +  [(set_attr "type" "compare")
  11036. +   (set_attr "length" "4,8")])
  11037. +
  11038. +(define_split
  11039. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  11040. +    (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11041. +                  (match_operand:SI 2 "gpc_reg_operand" ""))
  11042. +            (const_int 0)))
  11043. +   (clobber (match_scratch:SI 3 ""))]
  11044. +  "! TARGET_POWERPC64 && reload_completed"
  11045. +  [(set (match_dup 3)
  11046. +    (minus:SI (match_dup 1)
  11047. +          (match_dup 2)))
  11048. +   (set (match_dup 0)
  11049. +    (compare:CC (match_dup 3)
  11050. +            (const_int 0)))]
  11051. +  "")
  11052. +
  11053. +(define_insn ""
  11054. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  11055. +    (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  11056. +                  (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  11057. +            (const_int 0)))
  11058. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  11059. +    (minus:SI (match_dup 1) (match_dup 2)))]
  11060. +  "! TARGET_POWERPC"
  11061. +  "@
  11062. +   {sf.|subfc.} %0,%2,%1
  11063. +   #"
  11064. +  [(set_attr "type" "compare")
  11065. +   (set_attr "length" "4,8")])
  11066. +
  11067. +(define_insn ""
  11068. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  11069. +    (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  11070. +                  (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  11071. +            (const_int 0)))
  11072. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  11073. +    (minus:SI (match_dup 1)
  11074. +          (match_dup 2)))]
  11075. +  "TARGET_POWERPC && ! TARGET_POWERPC64"
  11076. +  "@
  11077. +   subf. %0,%2,%1
  11078. +   #"
  11079. +  [(set_attr "type" "compare")
  11080. +   (set_attr "length" "4,8")])
  11081. +
  11082. +(define_split
  11083. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  11084. +    (compare:CC (minus:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11085. +                  (match_operand:SI 2 "gpc_reg_operand" ""))
  11086. +            (const_int 0)))
  11087. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11088. +    (minus:SI (match_dup 1)
  11089. +          (match_dup 2)))]
  11090. +  "! TARGET_POWERPC64 && reload_completed"
  11091. +  [(set (match_dup 0)
  11092. +    (minus:SI (match_dup 1)
  11093. +          (match_dup 2)))
  11094. +   (set (match_dup 3)
  11095. +    (compare:CC (match_dup 0)
  11096. +            (const_int 0)))]
  11097. +  "")
  11098. +
  11099. +(define_expand "subsi3"
  11100. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11101. +    (minus:SI (match_operand:SI 1 "reg_or_short_operand" "")
  11102. +          (match_operand:SI 2 "reg_or_cint_operand" "")))]
  11103. +  ""
  11104. +  "
  11105. +{
  11106. +  if (GET_CODE (operands[2]) == CONST_INT)
  11107. +    {
  11108. +      emit_insn (gen_addsi3 (operands[0], operands[1],
  11109. +                 negate_rtx (SImode, operands[2])));
  11110. +      DONE;
  11111. +    }
  11112. +}")
  11113. +
  11114. +;; For SMIN, SMAX, UMIN, and UMAX, we use DEFINE_EXPAND's that involve a doz[i]
  11115. +;; instruction and some auxiliary computations.  Then we just have a single
  11116. +;; DEFINE_INSN for doz[i] and the define_splits to make them if made by
  11117. +;; combine.
  11118. +
  11119. +(define_expand "sminsi3"
  11120. +  [(set (match_dup 3)
  11121. +    (if_then_else:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11122. +                (match_operand:SI 2 "reg_or_short_operand" ""))
  11123. +             (const_int 0)
  11124. +             (minus:SI (match_dup 2) (match_dup 1))))
  11125. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11126. +    (minus:SI (match_dup 2) (match_dup 3)))]
  11127. +  "TARGET_POWER"
  11128. +  "
  11129. +{ operands[3] = gen_reg_rtx (SImode); }")
  11130. +
  11131. +(define_split
  11132. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11133. +    (smin:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11134. +         (match_operand:SI 2 "reg_or_short_operand" "")))
  11135. +   (clobber (match_operand:SI 3 "gpc_reg_operand" ""))]
  11136. +  "TARGET_POWER"
  11137. +  [(set (match_dup 3)
  11138. +    (if_then_else:SI (gt:SI (match_dup 1) (match_dup 2))
  11139. +             (const_int 0)
  11140. +             (minus:SI (match_dup 2) (match_dup 1))))
  11141. +   (set (match_dup 0) (minus:SI (match_dup 2) (match_dup 3)))]
  11142. +  "")
  11143. +
  11144. +(define_expand "smaxsi3"
  11145. +  [(set (match_dup 3)
  11146. +    (if_then_else:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11147. +                (match_operand:SI 2 "reg_or_short_operand" ""))
  11148. +             (const_int 0)
  11149. +             (minus:SI (match_dup 2) (match_dup 1))))
  11150. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11151. +    (plus:SI (match_dup 3) (match_dup 1)))]
  11152. +  "TARGET_POWER"
  11153. +  "
  11154. +{ operands[3] = gen_reg_rtx (SImode); }")
  11155. +
  11156. +(define_split
  11157. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11158. +    (smax:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11159. +         (match_operand:SI 2 "reg_or_short_operand" "")))
  11160. +   (clobber (match_operand:SI 3 "gpc_reg_operand" ""))]
  11161. +  "TARGET_POWER"
  11162. +  [(set (match_dup 3)
  11163. +    (if_then_else:SI (gt:SI (match_dup 1) (match_dup 2))
  11164. +             (const_int 0)
  11165. +             (minus:SI (match_dup 2) (match_dup 1))))
  11166. +   (set (match_dup 0) (plus:SI (match_dup 3) (match_dup 1)))]
  11167. +  "")
  11168. +
  11169. +(define_expand "uminsi3"
  11170. +  [(set (match_dup 3) (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11171. +                  (match_dup 5)))
  11172. +   (set (match_dup 4) (xor:SI (match_operand:SI 2 "gpc_reg_operand" "")
  11173. +                  (match_dup 5)))
  11174. +   (set (match_dup 3) (if_then_else:SI (gt (match_dup 3) (match_dup 4))
  11175. +                       (const_int 0)
  11176. +                       (minus:SI (match_dup 4) (match_dup 3))))
  11177. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11178. +    (minus:SI (match_dup 2) (match_dup 3)))]
  11179. +  "TARGET_POWER"
  11180. +  "
  11181. +{
  11182. +  operands[3] = gen_reg_rtx (SImode);
  11183. +  operands[4] = gen_reg_rtx (SImode);
  11184. +  operands[5] = GEN_INT (-2147483647 - 1);
  11185. +}")
  11186. +
  11187. +(define_expand "umaxsi3"
  11188. +  [(set (match_dup 3) (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11189. +                  (match_dup 5)))
  11190. +   (set (match_dup 4) (xor:SI (match_operand:SI 2 "gpc_reg_operand" "")
  11191. +                  (match_dup 5)))
  11192. +   (set (match_dup 3) (if_then_else:SI (gt (match_dup 3) (match_dup 4))
  11193. +                       (const_int 0)
  11194. +                       (minus:SI (match_dup 4) (match_dup 3))))
  11195. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11196. +    (plus:SI (match_dup 3) (match_dup 1)))]
  11197. +  "TARGET_POWER"
  11198. +  "
  11199. +{
  11200. +  operands[3] = gen_reg_rtx (SImode);
  11201. +  operands[4] = gen_reg_rtx (SImode);
  11202. +  operands[5] = GEN_INT (-2147483647 - 1);
  11203. +}")
  11204. +
  11205. +(define_insn ""
  11206. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11207. +    (if_then_else:SI (gt (match_operand:SI 1 "gpc_reg_operand" "r")
  11208. +                 (match_operand:SI 2 "reg_or_short_operand" "rI"))
  11209. +             (const_int 0)
  11210. +             (minus:SI (match_dup 2) (match_dup 1))))]
  11211. +  "TARGET_POWER"
  11212. +  "doz%I2 %0,%1,%2")
  11213. +
  11214. +(define_insn ""
  11215. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  11216. +    (compare:CC
  11217. +     (if_then_else:SI (gt (match_operand:SI 1 "gpc_reg_operand" "r")
  11218. +                  (match_operand:SI 2 "reg_or_short_operand" "rI"))
  11219. +              (const_int 0)
  11220. +              (minus:SI (match_dup 2) (match_dup 1)))
  11221. +     (const_int 0)))
  11222. +   (clobber (match_scratch:SI 3 "=r"))]
  11223. +  "TARGET_POWER"
  11224. +  "doz%I2. %3,%1,%2"
  11225. +  [(set_attr "type" "delayed_compare")])
  11226. +
  11227. +(define_insn ""
  11228. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  11229. +    (compare:CC
  11230. +     (if_then_else:SI (gt (match_operand:SI 1 "gpc_reg_operand" "r")
  11231. +                  (match_operand:SI 2 "reg_or_short_operand" "rI"))
  11232. +              (const_int 0)
  11233. +              (minus:SI (match_dup 2) (match_dup 1)))
  11234. +     (const_int 0)))
  11235. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11236. +    (if_then_else:SI (gt (match_dup 1) (match_dup 2))
  11237. +             (const_int 0)
  11238. +             (minus:SI (match_dup 2) (match_dup 1))))]
  11239. +  "TARGET_POWER"
  11240. +  "doz%I2. %0,%1,%2"
  11241. +  [(set_attr "type" "delayed_compare")])
  11242. +
  11243. +;; We don't need abs with condition code because such comparisons should
  11244. +;; never be done.
  11245. +(define_expand "abssi2"
  11246. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11247. +    (abs:SI (match_operand:SI 1 "gpc_reg_operand" "")))]
  11248. +  ""
  11249. +  "
  11250. +{
  11251. +  if (! TARGET_POWER)
  11252. +    {
  11253. +      emit_insn (gen_abssi2_nopower (operands[0], operands[1]));
  11254. +      DONE;
  11255. +    }
  11256. +}")
  11257. +
  11258. +(define_insn "abssi2_power"
  11259. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11260. +    (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
  11261. +  "TARGET_POWER"
  11262. +  "abs %0,%1")
  11263. +
  11264. +(define_insn "abssi2_nopower"
  11265. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
  11266. +    (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0")))
  11267. +   (clobber (match_scratch:SI 2 "=&r,&r"))]
  11268. +  "! TARGET_POWER"
  11269. +  "*
  11270. +{
  11271. +  return (TARGET_POWERPC)
  11272. +    ? \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;subf %0,%2,%0\"
  11273. +    : \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;{sf|subfc} %0,%2,%0\";
  11274. +}"
  11275. +  [(set_attr "length" "12")])
  11276. +
  11277. +(define_split
  11278. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
  11279. +    (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0")))
  11280. +   (clobber (match_scratch:SI 2 "=&r,&r"))]
  11281. +  "! TARGET_POWER && reload_completed"
  11282. +  [(set (match_dup 2) (ashiftrt:SI (match_dup 1) (const_int 31)))
  11283. +   (set (match_dup 0) (xor:SI (match_dup 2) (match_dup 1)))
  11284. +   (set (match_dup 0) (minus:SI (match_dup 0) (match_dup 2)))]
  11285. +  "")
  11286. +
  11287. +(define_insn "*nabs_power"
  11288. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11289. +    (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r"))))]
  11290. +  "TARGET_POWER"
  11291. +  "nabs %0,%1")
  11292. +
  11293. +(define_insn "*nabs_no_power"
  11294. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
  11295. +    (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0"))))
  11296. +   (clobber (match_scratch:SI 2 "=&r,&r"))]
  11297. +  "! TARGET_POWER"
  11298. +  "*
  11299. +{
  11300. +  return (TARGET_POWERPC)
  11301. +    ? \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;subf %0,%0,%2\"
  11302. +    : \"{srai|srawi} %2,%1,31\;xor %0,%2,%1\;{sf|subfc} %0,%0,%2\";
  11303. +}"
  11304. +  [(set_attr "length" "12")])
  11305. +
  11306. +(define_split
  11307. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=&r,r")
  11308. +    (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r,0"))))
  11309. +   (clobber (match_scratch:SI 2 "=&r,&r"))]
  11310. +  "! TARGET_POWER && reload_completed"
  11311. +  [(set (match_dup 2) (ashiftrt:SI (match_dup 1) (const_int 31)))
  11312. +   (set (match_dup 0) (xor:SI (match_dup 2) (match_dup 1)))
  11313. +   (set (match_dup 0) (minus:SI (match_dup 2) (match_dup 0)))]
  11314. +  "")
  11315. +
  11316. +(define_insn "negsi2"
  11317. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11318. +    (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
  11319. +  ""
  11320. +  "neg %0,%1")
  11321. +
  11322. +(define_insn ""
  11323. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  11324. +    (compare:CC (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  11325. +            (const_int 0)))
  11326. +   (clobber (match_scratch:SI 2 "=r"))]
  11327. +  "! TARGET_POWERPC64"
  11328. +  "neg. %2,%1"
  11329. +  [(set_attr "type" "compare")])
  11330. +
  11331. +(define_insn ""
  11332. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  11333. +    (compare:CC (neg:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  11334. +            (const_int 0)))
  11335. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11336. +    (neg:SI (match_dup 1)))]
  11337. +  "! TARGET_POWERPC64"
  11338. +  "neg. %0,%1"
  11339. +  [(set_attr "type" "compare")])
  11340. +
  11341. +(define_insn "ffssi2"
  11342. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
  11343. +    (ffs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))]
  11344. +  ""
  11345. +  "neg %0,%1\;and %0,%0,%1\;{cntlz|cntlzw} %0,%0\;{sfi|subfic} %0,%0,32"
  11346. +  [(set_attr "length" "16")])
  11347. +
  11348. +(define_expand "mulsi3"
  11349. +  [(use (match_operand:SI 0 "gpc_reg_operand" ""))
  11350. +   (use (match_operand:SI 1 "gpc_reg_operand" ""))
  11351. +   (use (match_operand:SI 2 "reg_or_short_operand" ""))]
  11352. +  ""
  11353. +  "
  11354. +{
  11355. +  if (TARGET_POWER)
  11356. +    emit_insn (gen_mulsi3_mq (operands[0], operands[1], operands[2]));
  11357. +  else
  11358. +    emit_insn (gen_mulsi3_no_mq (operands[0], operands[1], operands[2]));
  11359. +  DONE;
  11360. +}")
  11361. +
  11362. +(define_insn "mulsi3_mq"
  11363. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  11364. +    (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  11365. +         (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  11366. +   (clobber (match_scratch:SI 3 "=q,q"))]
  11367. +  "TARGET_POWER"
  11368. +  "@
  11369. +   {muls|mullw} %0,%1,%2
  11370. +   {muli|mulli} %0,%1,%2"
  11371. +   [(set_attr "type" "imul")])
  11372. +
  11373. +(define_insn "mulsi3_no_mq"
  11374. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  11375. +    (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  11376. +         (match_operand:SI 2 "reg_or_short_operand" "r,I")))]
  11377. +  "! TARGET_POWER"
  11378. +  "@
  11379. +   {muls|mullw} %0,%1,%2
  11380. +   {muli|mulli} %0,%1,%2"
  11381. +   [(set_attr "type" "imul")])
  11382. +
  11383. +(define_insn ""
  11384. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  11385. +    (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
  11386. +                 (match_operand:SI 2 "gpc_reg_operand" "r"))
  11387. +            (const_int 0)))
  11388. +   (clobber (match_scratch:SI 3 "=r"))
  11389. +   (clobber (match_scratch:SI 4 "=q"))]
  11390. +  "TARGET_POWER"
  11391. +  "{muls.|mullw.} %3,%1,%2"
  11392. +  [(set_attr "type" "delayed_compare")])
  11393. +
  11394. +(define_insn ""
  11395. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  11396. +    (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
  11397. +                 (match_operand:SI 2 "gpc_reg_operand" "r"))
  11398. +            (const_int 0)))
  11399. +   (clobber (match_scratch:SI 3 "=r"))]
  11400. +  "! TARGET_POWER"
  11401. +  "{muls.|mullw.} %3,%1,%2"
  11402. +  [(set_attr "type" "delayed_compare")])
  11403. +
  11404. +(define_insn ""
  11405. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  11406. +    (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
  11407. +                 (match_operand:SI 2 "gpc_reg_operand" "r"))
  11408. +            (const_int 0)))
  11409. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11410. +    (mult:SI (match_dup 1) (match_dup 2)))
  11411. +   (clobber (match_scratch:SI 4 "=q"))]
  11412. +  "TARGET_POWER"
  11413. +  "{muls.|mullw.} %0,%1,%2"
  11414. +  [(set_attr "type" "delayed_compare")])
  11415. +
  11416. +(define_insn ""
  11417. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  11418. +    (compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
  11419. +                 (match_operand:SI 2 "gpc_reg_operand" "r"))
  11420. +            (const_int 0)))
  11421. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11422. +    (mult:SI (match_dup 1) (match_dup 2)))]
  11423. +  "! TARGET_POWER"
  11424. +  "{muls.|mullw.} %0,%1,%2"
  11425. +  [(set_attr "type" "delayed_compare")])
  11426. +
  11427. +;; Operand 1 is divided by operand 2; quotient goes to operand
  11428. +;; 0 and remainder to operand 3.
  11429. +;; ??? At some point, see what, if anything, we can do about if (x % y == 0).
  11430. +
  11431. +(define_expand "divmodsi4"
  11432. +  [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11433. +           (div:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11434. +               (match_operand:SI 2 "gpc_reg_operand" "")))
  11435. +          (set (match_operand:SI 3 "gpc_reg_operand" "")
  11436. +           (mod:SI (match_dup 1) (match_dup 2)))])]
  11437. +  "TARGET_POWER || (! TARGET_POWER && ! TARGET_POWERPC)"
  11438. +  "
  11439. +{
  11440. +  if (! TARGET_POWER && ! TARGET_POWERPC)
  11441. +    {
  11442. +      emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
  11443. +      emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
  11444. +      emit_insn (gen_divss_call ());
  11445. +      emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
  11446. +      emit_move_insn (operands[3], gen_rtx_REG (SImode, 4));
  11447. +      DONE;
  11448. +    }
  11449. +}")
  11450. +
  11451. +(define_insn ""
  11452. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11453. +    (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11454. +        (match_operand:SI 2 "gpc_reg_operand" "r")))
  11455. +   (set (match_operand:SI 3 "gpc_reg_operand" "=q")
  11456. +    (mod:SI (match_dup 1) (match_dup 2)))]
  11457. +  "TARGET_POWER"
  11458. +  "divs %0,%1,%2"
  11459. +  [(set_attr "type" "idiv")])
  11460. +
  11461. +(define_expand "udivsi3"
  11462. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11463. +        (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11464. +                 (match_operand:SI 2 "gpc_reg_operand" "")))]
  11465. +  "TARGET_POWERPC || (! TARGET_POWER && ! TARGET_POWERPC)"
  11466. +  "
  11467. +{
  11468. +  if (! TARGET_POWER && ! TARGET_POWERPC)
  11469. +    {
  11470. +      emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
  11471. +      emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
  11472. +      emit_insn (gen_quous_call ());
  11473. +      emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
  11474. +      DONE;
  11475. +    }
  11476. +  else if (TARGET_POWER)
  11477. +    {
  11478. +      emit_insn (gen_udivsi3_mq (operands[0], operands[1], operands[2]));
  11479. +      DONE;
  11480. +    }
  11481. +}")
  11482. +
  11483. +(define_insn "udivsi3_mq"
  11484. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11485. +        (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11486. +                 (match_operand:SI 2 "gpc_reg_operand" "r")))
  11487. +   (clobber (match_scratch:SI 3 "=q"))]
  11488. +  "TARGET_POWERPC && TARGET_POWER"
  11489. +  "divwu %0,%1,%2"
  11490. +  [(set_attr "type" "idiv")])
  11491. +
  11492. +(define_insn "*udivsi3_no_mq"
  11493. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11494. +        (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11495. +                 (match_operand:SI 2 "gpc_reg_operand" "r")))]
  11496. +  "TARGET_POWERPC && ! TARGET_POWER"
  11497. +  "divwu %0,%1,%2"
  11498. +  [(set_attr "type" "idiv")])
  11499. +
  11500. +;; For powers of two we can do srai/aze for divide and then adjust for
  11501. +;; modulus.  If it isn't a power of two, FAIL on POWER so divmodsi4 will be
  11502. +;; used; for PowerPC, force operands into register and do a normal divide;
  11503. +;; for AIX common-mode, use quoss call on register operands.
  11504. +(define_expand "divsi3"
  11505. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11506. +    (div:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11507. +        (match_operand:SI 2 "reg_or_cint_operand" "")))]
  11508. +  ""
  11509. +  "
  11510. +{
  11511. +  if (GET_CODE (operands[2]) == CONST_INT
  11512. +      && exact_log2 (INTVAL (operands[2])) >= 0)
  11513. +    ;
  11514. +  else if (TARGET_POWERPC)
  11515. +    {
  11516. +      operands[2] = force_reg (SImode, operands[2]);
  11517. +      if (TARGET_POWER)
  11518. +    {
  11519. +      emit_insn (gen_divsi3_mq (operands[0], operands[1], operands[2]));
  11520. +      DONE;
  11521. +    }
  11522. +    }
  11523. +  else if (TARGET_POWER)
  11524. +    FAIL;
  11525. +  else
  11526. +    {
  11527. +      emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
  11528. +      emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
  11529. +      emit_insn (gen_quoss_call ());
  11530. +      emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
  11531. +      DONE;
  11532. +    }
  11533. +}")
  11534. +
  11535. +(define_insn "divsi3_mq"
  11536. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11537. +        (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11538. +                (match_operand:SI 2 "gpc_reg_operand" "r")))
  11539. +   (clobber (match_scratch:SI 3 "=q"))]
  11540. +  "TARGET_POWERPC && TARGET_POWER"
  11541. +  "divw %0,%1,%2"
  11542. +  [(set_attr "type" "idiv")])
  11543. +
  11544. +(define_insn "*divsi3_no_mq"
  11545. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11546. +        (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11547. +                (match_operand:SI 2 "gpc_reg_operand" "r")))]
  11548. +  "TARGET_POWERPC && ! TARGET_POWER"
  11549. +  "divw %0,%1,%2"
  11550. +  [(set_attr "type" "idiv")])
  11551. +
  11552. +(define_expand "modsi3"
  11553. +  [(use (match_operand:SI 0 "gpc_reg_operand" ""))
  11554. +   (use (match_operand:SI 1 "gpc_reg_operand" ""))
  11555. +   (use (match_operand:SI 2 "reg_or_cint_operand" ""))]
  11556. +  ""
  11557. +  "
  11558. +{
  11559. +  int i = exact_log2 (INTVAL (operands[2]));
  11560. +  rtx temp1;
  11561. +  rtx temp2;
  11562. +
  11563. +  if (GET_CODE (operands[2]) != CONST_INT || i < 0)
  11564. +    FAIL;
  11565. +
  11566. +  temp1 = gen_reg_rtx (SImode);
  11567. +  temp2 = gen_reg_rtx (SImode);
  11568. +
  11569. +  emit_insn (gen_divsi3 (temp1, operands[1], operands[2]));
  11570. +  emit_insn (gen_ashlsi3 (temp2, temp1, GEN_INT (i)));
  11571. +  emit_insn (gen_subsi3 (operands[0], operands[1], temp2));
  11572. +  DONE;
  11573. +}")
  11574. +
  11575. +(define_insn ""
  11576. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11577. +    (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11578. +        (match_operand:SI 2 "const_int_operand" "N")))]
  11579. +  "exact_log2 (INTVAL (operands[2])) >= 0"
  11580. +  "{srai|srawi} %0,%1,%p2\;{aze|addze} %0,%0"
  11581. +  [(set_attr "length" "8")])
  11582. +
  11583. +(define_insn ""
  11584. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  11585. +    (compare:CC (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11586. +                (match_operand:SI 2 "const_int_operand" "N"))
  11587. +            (const_int 0)))
  11588. +   (clobber (match_scratch:SI 3 "=r"))]
  11589. +  "exact_log2 (INTVAL (operands[2])) >= 0"
  11590. +  "{srai|srawi} %3,%1,%p2\;{aze.|addze.} %3,%3"
  11591. +  [(set_attr "type" "compare")
  11592. +   (set_attr "length" "8")])
  11593. +
  11594. +(define_insn ""
  11595. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  11596. +    (compare:CC (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  11597. +                (match_operand:SI 2 "const_int_operand" "N"))
  11598. +            (const_int 0)))
  11599. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11600. +    (div:SI (match_dup 1) (match_dup 2)))]
  11601. +  "exact_log2 (INTVAL (operands[2])) >= 0"
  11602. +  "{srai|srawi} %0,%1,%p2\;{aze.|addze.} %0,%0"
  11603. +  [(set_attr "type" "compare")
  11604. +   (set_attr "length" "8")])
  11605. +
  11606. +(define_insn ""
  11607. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  11608. +    (udiv:SI
  11609. +     (plus:DI (ashift:DI
  11610. +           (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "r"))
  11611. +           (const_int 32))
  11612. +          (zero_extend:DI (match_operand:SI 4 "register_operand" "2")))
  11613. +     (match_operand:SI 3 "gpc_reg_operand" "r")))
  11614. +   (set (match_operand:SI 2 "register_operand" "=*q")
  11615. +    (umod:SI
  11616. +     (plus:DI (ashift:DI
  11617. +           (zero_extend:DI (match_dup 1)) (const_int 32))
  11618. +          (zero_extend:DI (match_dup 4)))
  11619. +     (match_dup 3)))]
  11620. +  "TARGET_POWER"
  11621. +  "div %0,%1,%3"
  11622. +  [(set_attr "type" "idiv")])
  11623. +
  11624. +;; To do unsigned divide we handle the cases of the divisor looking like a
  11625. +;; negative number.  If it is a constant that is less than 2**31, we don't
  11626. +;; have to worry about the branches.  So make a few subroutines here.
  11627. +;;
  11628. +;; First comes the normal case.
  11629. +(define_expand "udivmodsi4_normal"
  11630. +  [(set (match_dup 4) (const_int 0))
  11631. +   (parallel [(set (match_operand:SI 0 "" "")
  11632. +           (udiv:SI (plus:DI (ashift:DI (zero_extend:DI (match_dup 4))
  11633. +                        (const_int 32))
  11634. +                     (zero_extend:DI (match_operand:SI 1 "" "")))
  11635. +                (match_operand:SI 2 "" "")))
  11636. +          (set (match_operand:SI 3 "" "")
  11637. +           (umod:SI (plus:DI (ashift:DI (zero_extend:DI (match_dup 4))
  11638. +                        (const_int 32))
  11639. +                     (zero_extend:DI (match_dup 1)))
  11640. +                (match_dup 2)))])]
  11641. +  "TARGET_POWER"
  11642. +  "
  11643. +{ operands[4] = gen_reg_rtx (SImode); }")
  11644. +
  11645. +;; This handles the branches.
  11646. +(define_expand "udivmodsi4_tests"
  11647. +  [(set (match_operand:SI 0 "" "") (const_int 0))
  11648. +   (set (match_operand:SI 3 "" "") (match_operand:SI 1 "" ""))
  11649. +   (set (match_dup 5) (compare:CCUNS (match_dup 1) (match_operand:SI 2 "" "")))
  11650. +   (set (pc) (if_then_else (ltu (match_dup 5) (const_int 0))
  11651. +               (label_ref (match_operand:SI 4 "" "")) (pc)))
  11652. +   (set (match_dup 0) (const_int 1))
  11653. +   (set (match_dup 3) (minus:SI (match_dup 1) (match_dup 2)))
  11654. +   (set (match_dup 6) (compare:CC (match_dup 2) (const_int 0)))
  11655. +   (set (pc) (if_then_else (lt (match_dup 6) (const_int 0))
  11656. +               (label_ref (match_dup 4)) (pc)))]
  11657. +  "TARGET_POWER"
  11658. +  "
  11659. +{ operands[5] = gen_reg_rtx (CCUNSmode);
  11660. +  operands[6] = gen_reg_rtx (CCmode);
  11661. +}")
  11662. +
  11663. +(define_expand "udivmodsi4"
  11664. +  [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11665. +           (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11666. +                (match_operand:SI 2 "reg_or_cint_operand" "")))
  11667. +          (set (match_operand:SI 3 "gpc_reg_operand" "")
  11668. +           (umod:SI (match_dup 1) (match_dup 2)))])]
  11669. +  ""
  11670. +  "
  11671. +{
  11672. +  rtx label = 0;
  11673. +
  11674. +  if (! TARGET_POWER)
  11675. +    {
  11676. +      if (! TARGET_POWERPC)
  11677. +        {
  11678. +      emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
  11679. +      emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
  11680. +      emit_insn (gen_divus_call ());
  11681. +      emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
  11682. +      emit_move_insn (operands[3], gen_rtx_REG (SImode, 4));
  11683. +      DONE;
  11684. +        }
  11685. +      else
  11686. +        FAIL;
  11687. +    }
  11688. +
  11689. +  if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) < 0)
  11690. +    {
  11691. +      operands[2] = force_reg (SImode, operands[2]);
  11692. +      label = gen_label_rtx ();
  11693. +      emit (gen_udivmodsi4_tests (operands[0], operands[1], operands[2],
  11694. +                  operands[3], label));
  11695. +    }
  11696. +  else
  11697. +    operands[2] = force_reg (SImode, operands[2]);
  11698. +
  11699. +  emit (gen_udivmodsi4_normal (operands[0], operands[1], operands[2],
  11700. +                   operands[3]));
  11701. +  if (label)
  11702. +    emit_label (label);
  11703. +
  11704. +  DONE;
  11705. +}")
  11706. +
  11707. +;; AIX architecture-independent common-mode multiply (DImode),
  11708. +;; divide/modulus, and quotient subroutine calls.  Input operands in R3 and
  11709. +;; R4; results in R3 and sometimes R4; link register always clobbered by bla
  11710. +;; instruction; R0 sometimes clobbered; also, MQ sometimes clobbered but
  11711. +;; assumed unused if generating common-mode, so ignore.
  11712. +(define_insn "mulh_call"
  11713. +  [(set (reg:SI 3)
  11714. +    (truncate:SI
  11715. +     (lshiftrt:DI (mult:DI (sign_extend:DI (reg:SI 3))
  11716. +                   (sign_extend:DI (reg:SI 4)))
  11717. +              (const_int 32))))
  11718. +   (clobber (match_scratch:SI 0 "=l"))]
  11719. +  "! TARGET_POWER && ! TARGET_POWERPC"
  11720. +  "bla __mulh"
  11721. +  [(set_attr "type" "imul")])
  11722. +
  11723. +(define_insn "mull_call"
  11724. +  [(set (reg:DI 3)
  11725. +    (mult:DI (sign_extend:DI (reg:SI 3))
  11726. +         (sign_extend:DI (reg:SI 4))))
  11727. +   (clobber (match_scratch:SI 0 "=l"))
  11728. +   (clobber (reg:SI 0))]
  11729. +  "! TARGET_POWER && ! TARGET_POWERPC"
  11730. +  "bla __mull"
  11731. +  [(set_attr "type" "imul")])
  11732. +
  11733. +(define_insn "divss_call"
  11734. +  [(set (reg:SI 3)
  11735. +    (div:SI (reg:SI 3) (reg:SI 4)))
  11736. +   (set (reg:SI 4)
  11737. +    (mod:SI (reg:SI 3) (reg:SI 4)))
  11738. +   (clobber (match_scratch:SI 0 "=l"))
  11739. +   (clobber (reg:SI 0))]
  11740. +  "! TARGET_POWER && ! TARGET_POWERPC"
  11741. +  "bla __divss"
  11742. +  [(set_attr "type" "idiv")])
  11743. +
  11744. +(define_insn "divus_call"
  11745. +  [(set (reg:SI 3)
  11746. +    (udiv:SI (reg:SI 3) (reg:SI 4)))
  11747. +   (set (reg:SI 4)
  11748. +    (umod:SI (reg:SI 3) (reg:SI 4)))
  11749. +   (clobber (match_scratch:SI 0 "=l"))
  11750. +   (clobber (reg:SI 0))
  11751. +   (clobber (match_scratch:CC 1 "=x"))
  11752. +   (clobber (reg:CC 69))]
  11753. +  "! TARGET_POWER && ! TARGET_POWERPC"
  11754. +  "bla __divus"
  11755. +  [(set_attr "type" "idiv")])
  11756. +
  11757. +(define_insn "quoss_call"
  11758. +  [(set (reg:SI 3)
  11759. +    (div:SI (reg:SI 3) (reg:SI 4)))
  11760. +   (clobber (match_scratch:SI 0 "=l"))]
  11761. +  "! TARGET_POWER && ! TARGET_POWERPC"
  11762. +  "bla __quoss"
  11763. +  [(set_attr "type" "idiv")])
  11764. +
  11765. +(define_insn "quous_call"
  11766. +  [(set (reg:SI 3)
  11767. +    (udiv:SI (reg:SI 3) (reg:SI 4)))
  11768. +   (clobber (match_scratch:SI 0 "=l"))
  11769. +   (clobber (reg:SI 0))
  11770. +   (clobber (match_scratch:CC 1 "=x"))
  11771. +   (clobber (reg:CC 69))]
  11772. +  "! TARGET_POWER && ! TARGET_POWERPC"
  11773. +  "bla __quous"
  11774. +  [(set_attr "type" "idiv")])
  11775. +
  11776. +;; Logical instructions
  11777. +(define_insn "andsi3"
  11778. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r")
  11779. +    (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r")
  11780. +        (match_operand:SI 2 "and_operand" "?r,T,K,J")))
  11781. +   (clobber (match_scratch:CC 3 "=X,X,x,x"))]
  11782. +  ""
  11783. +  "@
  11784. +   and %0,%1,%2
  11785. +   {rlinm|rlwinm} %0,%1,0,%m2,%M2
  11786. +   {andil.|andi.} %0,%1,%b2
  11787. +   {andiu.|andis.} %0,%1,%u2"
  11788. +  [(set_attr "length" "4")])
  11789. +
  11790. +;; Note to set cr's other than cr0 we do the and immediate and then
  11791. +;; the test again -- this avoids a mcrf which on the higher end
  11792. +;; machines causes an execution serialization
  11793. +
  11794. +(define_insn "*andsi3_internal2"
  11795. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,?y,??y,??y,?y")
  11796. +    (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r,r,r,r")
  11797. +                (match_operand:SI 2 "and_operand" "r,K,J,T,r,K,J,T"))
  11798. +            (const_int 0)))
  11799. +   (clobber (match_scratch:SI 3 "=r,r,r,r,r,r,r,r"))
  11800. +   (clobber (match_scratch:CC 4 "=X,X,X,X,X,x,x,X"))]
  11801. +  "! TARGET_POWERPC64"
  11802. +  "@
  11803. +   and. %3,%1,%2
  11804. +   {andil.|andi.} %3,%1,%b2
  11805. +   {andiu.|andis.} %3,%1,%u2
  11806. +   {rlinm.|rlwinm.} %3,%1,0,%m2,%M2
  11807. +   #
  11808. +   #
  11809. +   #
  11810. +   #"
  11811. +  [(set_attr "type" "compare,compare,compare,delayed_compare,compare,compare,compare,compare")
  11812. +   (set_attr "length" "4,4,4,4,8,8,8,8")])
  11813. +
  11814. +(define_split
  11815. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  11816. +    (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11817. +                (match_operand:SI 2 "and_operand" ""))
  11818. +            (const_int 0)))
  11819. +   (clobber (match_scratch:SI 3 ""))
  11820. +   (clobber (match_scratch:CC 4 ""))]
  11821. +  "! TARGET_POWERPC64 && reload_completed"
  11822. +  [(parallel [(set (match_dup 3)
  11823. +           (and:SI (match_dup 1)
  11824. +               (match_dup 2)))
  11825. +          (clobber (match_dup 4))])
  11826. +   (set (match_dup 0)
  11827. +    (compare:CC (match_dup 3)
  11828. +            (const_int 0)))]
  11829. +  "")
  11830. +
  11831. +(define_insn "*andsi3_internal3"
  11832. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x,x,?y,??y,??y,?y")
  11833. +    (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r,r,r,r")
  11834. +                (match_operand:SI 2 "and_operand" "r,K,J,T,r,K,J,T"))
  11835. +            (const_int 0)))
  11836. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r,r,r,r")
  11837. +    (and:SI (match_dup 1)
  11838. +        (match_dup 2)))
  11839. +   (clobber (match_scratch:CC 4 "=X,X,X,X,X,x,x,X"))]
  11840. +  "! TARGET_POWERPC64"
  11841. +  "@
  11842. +   and. %0,%1,%2
  11843. +   {andil.|andi.} %0,%1,%b2
  11844. +   {andiu.|andis.} %0,%1,%u2
  11845. +   {rlinm.|rlwinm.} %0,%1,0,%m2,%M2
  11846. +   #
  11847. +   #
  11848. +   #
  11849. +   #"
  11850. +  [(set_attr "type" "compare,compare,compare,delayed_compare,compare,compare,compare,compare")
  11851. +   (set_attr "length" "4,4,4,4,8,8,8,8")])
  11852. +
  11853. +(define_split
  11854. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  11855. +    (compare:CC (and:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11856. +                (match_operand:SI 2 "and_operand" ""))
  11857. +            (const_int 0)))
  11858. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11859. +    (and:SI (match_dup 1)
  11860. +        (match_dup 2)))
  11861. +   (clobber (match_scratch:CC 4 ""))]
  11862. +  "! TARGET_POWERPC64 && reload_completed"
  11863. +  [(parallel [(set (match_dup 0)
  11864. +           (and:SI (match_dup 1)
  11865. +               (match_dup 2)))
  11866. +          (clobber (match_dup 4))])
  11867. +   (set (match_dup 3)
  11868. +    (compare:CC (match_dup 0)
  11869. +            (const_int 0)))]
  11870. +  "")
  11871. +
  11872. +(define_expand "iorsi3"
  11873. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11874. +    (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11875. +        (match_operand:SI 2 "reg_or_cint_operand" "")))]
  11876. +  ""
  11877. +  "
  11878. +{
  11879. +  if (GET_CODE (operands[2]) == CONST_INT
  11880. +      && ! logical_operand (operands[2], SImode))
  11881. +    {
  11882. +      HOST_WIDE_INT value = INTVAL (operands[2]);
  11883. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  11884. +         ? operands[0] : gen_reg_rtx (SImode));
  11885. +
  11886. +      emit_insn (gen_iorsi3 (tmp, operands[1],
  11887. +                 GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
  11888. +      emit_insn (gen_iorsi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
  11889. +      DONE;
  11890. +    }
  11891. +}")
  11892. +
  11893. +(define_insn "*iorsi3_internal1"
  11894. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
  11895. +    (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r")
  11896. +        (match_operand:SI 2 "logical_operand" "r,K,J")))]
  11897. +  ""
  11898. +  "@
  11899. +   or %0,%1,%2
  11900. +   {oril|ori} %0,%1,%b2
  11901. +   {oriu|oris} %0,%1,%u2"
  11902. +  [(set_attr "length" "4,4,4")])
  11903. +
  11904. +(define_insn "*iorsi3_internal2"
  11905. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  11906. +    (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  11907. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  11908. +            (const_int 0)))
  11909. +   (clobber (match_scratch:SI 3 "=r,r"))]
  11910. +  "! TARGET_POWERPC64"
  11911. +  "@
  11912. +   or. %3,%1,%2
  11913. +   #"
  11914. +  [(set_attr "type" "compare")
  11915. +   (set_attr "length" "4,8")])
  11916. +
  11917. +(define_split
  11918. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  11919. +    (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11920. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  11921. +            (const_int 0)))
  11922. +   (clobber (match_scratch:SI 3 ""))]
  11923. +  "! TARGET_POWERPC64 && reload_completed"
  11924. +  [(set (match_dup 3)
  11925. +    (ior:SI (match_dup 1)
  11926. +        (match_dup 2)))
  11927. +   (set (match_dup 0)
  11928. +    (compare:CC (match_dup 3)
  11929. +            (const_int 0)))]
  11930. +  "")
  11931. +
  11932. +(define_insn "*iorsi3_internal3"
  11933. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  11934. +    (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  11935. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  11936. +            (const_int 0)))
  11937. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  11938. +    (ior:SI (match_dup 1)
  11939. +        (match_dup 2)))]
  11940. +  "! TARGET_POWERPC64"
  11941. +  "@
  11942. +   or. %0,%1,%2
  11943. +   #"
  11944. +  [(set_attr "type" "compare")
  11945. +   (set_attr "length" "4,8")])
  11946. +
  11947. +(define_split
  11948. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  11949. +    (compare:CC (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11950. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  11951. +            (const_int 0)))
  11952. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  11953. +    (ior:SI (match_dup 1) (match_dup 2)))]
  11954. +  "! TARGET_POWERPC64 && reload_completed"
  11955. +  [(set (match_dup 0)
  11956. +    (ior:SI (match_dup 1)
  11957. +        (match_dup 2)))
  11958. +   (set (match_dup 3)
  11959. +    (compare:CC (match_dup 0)
  11960. +            (const_int 0)))]
  11961. +  "")
  11962. +
  11963. +;; Split an IOR that we can't do in one insn into two insns, each of which
  11964. +;; does one 16-bit part.  This is used by combine.
  11965. +
  11966. +(define_split
  11967. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11968. +    (ior:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11969. +        (match_operand:SI 2 "non_logical_cint_operand" "")))]
  11970. +  ""
  11971. +  [(set (match_dup 0) (ior:SI (match_dup 1) (match_dup 3)))
  11972. +   (set (match_dup 0) (ior:SI (match_dup 0) (match_dup 4)))]
  11973. +"
  11974. +{
  11975. +  operands[3] = GEN_INT (INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff));
  11976. +  operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
  11977. +}")
  11978. +
  11979. +(define_expand "xorsi3"
  11980. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  11981. +    (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  11982. +        (match_operand:SI 2 "reg_or_cint_operand" "")))]
  11983. +  ""
  11984. +  "
  11985. +{
  11986. +  if (GET_CODE (operands[2]) == CONST_INT
  11987. +      && ! logical_operand (operands[2], SImode))
  11988. +    {
  11989. +      HOST_WIDE_INT value = INTVAL (operands[2]);
  11990. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  11991. +         ? operands[0] : gen_reg_rtx (SImode));
  11992. +
  11993. +      emit_insn (gen_xorsi3 (tmp, operands[1],
  11994. +                 GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
  11995. +      emit_insn (gen_xorsi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
  11996. +      DONE;
  11997. +    }
  11998. +}")
  11999. +
  12000. +(define_insn "*xorsi3_internal1"
  12001. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
  12002. +    (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r")
  12003. +        (match_operand:SI 2 "logical_operand" "r,K,J")))]
  12004. +  ""
  12005. +  "@
  12006. +   xor %0,%1,%2
  12007. +   {xoril|xori} %0,%1,%b2
  12008. +   {xoriu|xoris} %0,%1,%u2"
  12009. +  [(set_attr "length" "4,4,4")])
  12010. +
  12011. +(define_insn "*xorsi3_internal2"
  12012. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  12013. +    (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  12014. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  12015. +            (const_int 0)))
  12016. +   (clobber (match_scratch:SI 3 "=r,r"))]
  12017. +  "! TARGET_POWERPC64"
  12018. +  "@
  12019. +   xor. %3,%1,%2
  12020. +   #"
  12021. +  [(set_attr "type" "compare")
  12022. +   (set_attr "length" "4,8")])
  12023. +
  12024. +(define_split
  12025. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  12026. +    (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  12027. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  12028. +            (const_int 0)))
  12029. +   (clobber (match_scratch:SI 3 ""))]
  12030. +  "! TARGET_POWERPC64 && reload_completed"
  12031. +  [(set (match_dup 3)
  12032. +    (xor:SI (match_dup 1)
  12033. +        (match_dup 2)))
  12034. +   (set (match_dup 0)
  12035. +    (compare:CC (match_dup 3)
  12036. +            (const_int 0)))]
  12037. +  "")
  12038. +
  12039. +(define_insn "*xorsi3_internal3"
  12040. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  12041. +    (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  12042. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  12043. +            (const_int 0)))
  12044. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12045. +    (xor:SI (match_dup 1)
  12046. +        (match_dup 2)))]
  12047. +  "! TARGET_POWERPC64"
  12048. +  "@
  12049. +   xor. %0,%1,%2
  12050. +   #"
  12051. +  [(set_attr "type" "compare")
  12052. +   (set_attr "length" "4,8")])
  12053. +
  12054. +(define_split
  12055. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  12056. +    (compare:CC (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  12057. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  12058. +            (const_int 0)))
  12059. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  12060. +    (xor:SI (match_dup 1) (match_dup 2)))]
  12061. +  "! TARGET_POWERPC64 && reload_completed"
  12062. +  [(set (match_dup 0)
  12063. +    (xor:SI (match_dup 1)
  12064. +        (match_dup 2)))
  12065. +   (set (match_dup 3)
  12066. +    (compare:CC (match_dup 0)
  12067. +            (const_int 0)))]
  12068. +  "")
  12069. +
  12070. +;; Split an XOR that we can't do in one insn into two insns, each of which
  12071. +;; does one 16-bit part.  This is used by combine.
  12072. +
  12073. +(define_split
  12074. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  12075. +        (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  12076. +                (match_operand:SI 2 "non_logical_cint_operand" "")))]
  12077. +  ""
  12078. +  [(set (match_dup 0) (xor:SI (match_dup 1) (match_dup 3)))
  12079. +   (set (match_dup 0) (xor:SI (match_dup 0) (match_dup 4)))]
  12080. +"
  12081. +{
  12082. +  operands[3] = GEN_INT (INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff));
  12083. +  operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
  12084. +}")
  12085. +
  12086. +(define_insn "*eqvsi3_internal1"
  12087. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12088. +    (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r")
  12089. +            (match_operand:SI 2 "gpc_reg_operand" "r"))))]
  12090. +   ""
  12091. +   "eqv %0,%1,%2")
  12092. +
  12093. +(define_insn "*eqvsi3_internal2"
  12094. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  12095. +    (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  12096. +                    (match_operand:SI 2 "gpc_reg_operand" "r,r")))
  12097. +            (const_int 0)))
  12098. +   (clobber (match_scratch:SI 3 "=r,r"))]
  12099. +   "! TARGET_POWERPC64"
  12100. +   "@
  12101. +    eqv. %3,%1,%2
  12102. +    #"
  12103. +   [(set_attr "type" "compare")
  12104. +   (set_attr "length" "4,8")])
  12105. +
  12106. +(define_split
  12107. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  12108. +    (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  12109. +                    (match_operand:SI 2 "gpc_reg_operand" "")))
  12110. +            (const_int 0)))
  12111. +   (clobber (match_scratch:SI 3 ""))]
  12112. +  "! TARGET_POWERPC64 && reload_completed"
  12113. +  [(set (match_dup 3)
  12114. +    (not:SI (xor:SI (match_dup 1)
  12115. +            (match_dup 2))))
  12116. +   (set (match_dup 0)
  12117. +    (compare:CC (match_dup 3)
  12118. +            (const_int 0)))]
  12119. +  "")
  12120. +
  12121. +(define_insn "*eqvsi3_internal3"
  12122. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  12123. +    (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
  12124. +                    (match_operand:SI 2 "gpc_reg_operand" "r,r")))
  12125. +            (const_int 0)))
  12126. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12127. +    (not:SI (xor:SI (match_dup 1) (match_dup 2))))]
  12128. +   "! TARGET_POWERPC64"
  12129. +   "@
  12130. +    eqv. %0,%1,%2
  12131. +    #"
  12132. +   [(set_attr "type" "compare")
  12133. +   (set_attr "length" "4,8")])
  12134. +
  12135. +(define_split
  12136. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  12137. +    (compare:CC (not:SI (xor:SI (match_operand:SI 1 "gpc_reg_operand" "")
  12138. +                    (match_operand:SI 2 "reg_or_short_operand" "")))
  12139. +            (const_int 0)))
  12140. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  12141. +    (not:SI (xor:SI (match_dup 1)
  12142. +            (match_dup 2))))]
  12143. +  "! TARGET_POWERPC64 && reload_completed"
  12144. +  [(set (match_dup 0)
  12145. +    (not:SI (xor:SI (match_dup 1)
  12146. +            (match_dup 2))))
  12147. +   (set (match_dup 3)
  12148. +    (compare:CC (match_dup 0)
  12149. +            (const_int 0)))]
  12150. +  "")
  12151. +
  12152. +(define_insn "*andcsi3_internal1"
  12153. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12154. +    (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  12155. +        (match_operand:SI 2 "gpc_reg_operand" "r")))]
  12156. +  ""
  12157. +  "andc %0,%2,%1")
  12158. +
  12159. +(define_insn "*andcsi3_internal2"
  12160. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  12161. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
  12162. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  12163. +            (const_int 0)))
  12164. +   (clobber (match_scratch:SI 3 "=r,r"))]
  12165. +  "! TARGET_POWERPC64"
  12166. +  "@
  12167. +   andc. %3,%2,%1
  12168. +   #"
  12169. +  [(set_attr "type" "compare")
  12170. +   (set_attr "length" "4,8")])
  12171. +
  12172. +(define_split
  12173. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  12174. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12175. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  12176. +            (const_int 0)))
  12177. +   (clobber (match_scratch:SI 3 ""))]
  12178. +  "! TARGET_POWERPC64 && reload_completed"
  12179. +  [(set (match_dup 3)
  12180. +    (and:SI (not:SI (match_dup 1))
  12181. +        (match_dup 2)))
  12182. +   (set (match_dup 0)
  12183. +    (compare:CC (match_dup 3)
  12184. +            (const_int 0)))]
  12185. +  "")
  12186. +
  12187. +(define_insn "*andcsi3_internal3"
  12188. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  12189. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
  12190. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  12191. +            (const_int 0)))
  12192. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12193. +    (and:SI (not:SI (match_dup 1))
  12194. +        (match_dup 2)))]
  12195. +  "! TARGET_POWERPC64"
  12196. +  "@
  12197. +   andc. %0,%2,%1
  12198. +   #"
  12199. +  [(set_attr "type" "compare")
  12200. +   (set_attr "length" "4,8")])
  12201. +
  12202. +(define_split
  12203. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  12204. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12205. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  12206. +            (const_int 0)))
  12207. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  12208. +    (and:SI (not:SI (match_dup 1))
  12209. +        (match_dup 2)))]
  12210. +  "! TARGET_POWERPC64 && reload_completed"
  12211. +  [(set (match_dup 0)
  12212. +    (and:SI (not:SI (match_dup 1))
  12213. +        (match_dup 2)))
  12214. +   (set (match_dup 3)
  12215. +    (compare:CC (match_dup 0)
  12216. +            (const_int 0)))]
  12217. +  "")
  12218. +
  12219. +(define_insn "*iorcsi3_internal1"
  12220. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12221. +    (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  12222. +        (match_operand:SI 2 "gpc_reg_operand" "r")))]
  12223. +  ""
  12224. +  "orc %0,%2,%1")
  12225. +
  12226. +(define_insn "*iorcsi3_internal2"
  12227. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  12228. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
  12229. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  12230. +            (const_int 0)))
  12231. +   (clobber (match_scratch:SI 3 "=r,r"))]
  12232. +  "! TARGET_POWERPC64"
  12233. +  "@
  12234. +   orc. %3,%2,%1
  12235. +   #"
  12236. +  [(set_attr "type" "compare")
  12237. +   (set_attr "length" "4,8")])
  12238. +
  12239. +(define_split
  12240. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  12241. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12242. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  12243. +            (const_int 0)))
  12244. +   (clobber (match_scratch:SI 3 ""))]
  12245. +  "! TARGET_POWERPC64 && reload_completed"
  12246. +  [(set (match_dup 3)
  12247. +    (ior:SI (not:SI (match_dup 1))
  12248. +        (match_dup 2)))
  12249. +   (set (match_dup 0)
  12250. +    (compare:CC (match_dup 3)
  12251. +            (const_int 0)))]
  12252. +  "")
  12253. +
  12254. +(define_insn "*iorcsi3_internal3"
  12255. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  12256. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "r,r"))
  12257. +                (match_operand:SI 2 "gpc_reg_operand" "r,r"))
  12258. +            (const_int 0)))
  12259. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12260. +    (ior:SI (not:SI (match_dup 1)) (match_dup 2)))]
  12261. +  "! TARGET_POWERPC64"
  12262. +  "@
  12263. +   orc. %0,%2,%1
  12264. +   #"
  12265. +  [(set_attr "type" "compare")])
  12266. +
  12267. +(define_split
  12268. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  12269. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12270. +                (match_operand:SI 2 "gpc_reg_operand" ""))
  12271. +            (const_int 0)))
  12272. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  12273. +    (ior:SI (not:SI (match_dup 1))
  12274. +        (match_dup 2)))]
  12275. +  "! TARGET_POWERPC64 && reload_completed"
  12276. +  [(set (match_dup 0)
  12277. +    (ior:SI (not:SI (match_dup 1))
  12278. +        (match_dup 2)))
  12279. +   (set (match_dup 3)
  12280. +    (compare:CC (match_dup 0)
  12281. +            (const_int 0)))]
  12282. +  "")
  12283. +
  12284. +(define_insn "*nandsi3_internal1"
  12285. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12286. +    (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
  12287. +        (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
  12288. +  ""
  12289. +  "nand %0,%1,%2")
  12290. +
  12291. +(define_insn "*nandsi3_internal2"
  12292. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  12293. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
  12294. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
  12295. +            (const_int 0)))
  12296. +   (clobber (match_scratch:SI 3 "=r,r"))]
  12297. +  "! TARGET_POWERPC64"
  12298. +  "@
  12299. +   nand. %3,%1,%2
  12300. +   #"
  12301. +  [(set_attr "type" "compare")
  12302. +   (set_attr "length" "4,8")])
  12303. +
  12304. +(define_split
  12305. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  12306. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12307. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
  12308. +            (const_int 0)))
  12309. +   (clobber (match_scratch:SI 3 ""))]
  12310. +  "! TARGET_POWERPC64 && reload_completed"
  12311. +  [(set (match_dup 3)
  12312. +    (ior:SI (not:SI (match_dup 1))
  12313. +        (not:SI (match_dup 2))))
  12314. +   (set (match_dup 0)
  12315. +    (compare:CC (match_dup 3)
  12316. +            (const_int 0)))]
  12317. +  "")
  12318. +
  12319. +(define_insn "*nandsi3_internal3"
  12320. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  12321. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
  12322. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
  12323. +            (const_int 0)))
  12324. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12325. +    (ior:SI (not:SI (match_dup 1))
  12326. +        (not:SI (match_dup 2))))]
  12327. +  "! TARGET_POWERPC64"
  12328. +  "@
  12329. +   nand. %0,%1,%2
  12330. +   #"
  12331. +  [(set_attr "type" "compare")
  12332. +   (set_attr "length" "4,8")])
  12333. +
  12334. +(define_split
  12335. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  12336. +    (compare:CC (ior:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12337. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
  12338. +            (const_int 0)))
  12339. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  12340. +    (ior:SI (not:SI (match_dup 1))
  12341. +        (not:SI (match_dup 2))))]
  12342. +  "! TARGET_POWERPC64 && reload_completed"
  12343. +  [(set (match_dup 0)
  12344. +    (ior:SI (not:SI (match_dup 1))
  12345. +        (not:SI (match_dup 2))))
  12346. +   (set (match_dup 3)
  12347. +    (compare:CC (match_dup 0)
  12348. +            (const_int 0)))]
  12349. +  "")
  12350. +
  12351. +(define_insn "*norsi3_internal1"
  12352. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12353. +    (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r"))
  12354. +        (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
  12355. +  ""
  12356. +  "nor %0,%1,%2")
  12357. +
  12358. +(define_insn "*norsi3_internal2"
  12359. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
  12360. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
  12361. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
  12362. +            (const_int 0)))
  12363. +   (clobber (match_scratch:SI 3 "=r,r"))]
  12364. +  "! TARGET_POWERPC64"
  12365. +  "@
  12366. +   nor. %3,%1,%2
  12367. +   #"
  12368. +  [(set_attr "type" "compare")
  12369. +   (set_attr "length" "4,8")])
  12370. +
  12371. +(define_split
  12372. +  [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
  12373. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12374. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
  12375. +            (const_int 0)))
  12376. +   (clobber (match_scratch:SI 3 ""))]
  12377. +  "! TARGET_POWERPC64 && reload_completed"
  12378. +  [(set (match_dup 3)
  12379. +    (and:SI (not:SI (match_dup 1))
  12380. +        (not:SI (match_dup 2))))
  12381. +   (set (match_dup 0)
  12382. +    (compare:CC (match_dup 3)
  12383. +            (const_int 0)))]
  12384. +  "")
  12385. +
  12386. +(define_insn "*norsi3_internal3"
  12387. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
  12388. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r"))
  12389. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "r,r")))
  12390. +            (const_int 0)))
  12391. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12392. +    (and:SI (not:SI (match_dup 1))
  12393. +        (not:SI (match_dup 2))))]
  12394. +  "! TARGET_POWERPC64"
  12395. +  "@
  12396. +   nor. %0,%1,%2
  12397. +   #"
  12398. +  [(set_attr "type" "compare")
  12399. +   (set_attr "length" "4,8")])
  12400. +
  12401. +(define_split
  12402. +  [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
  12403. +    (compare:CC (and:SI (not:SI (match_operand:SI 1 "gpc_reg_operand" ""))
  12404. +                (not:SI (match_operand:SI 2 "gpc_reg_operand" "")))
  12405. +            (const_int 0)))
  12406. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  12407. +    (and:SI (not:SI (match_dup 1))
  12408. +        (not:SI (match_dup 2))))]
  12409. +  "! TARGET_POWERPC64 && reload_completed"
  12410. +  [(set (match_dup 0)
  12411. +    (and:SI (not:SI (match_dup 1))
  12412. +        (not:SI (match_dup 2))))
  12413. +   (set (match_dup 3)
  12414. +    (compare:CC (match_dup 0)
  12415. +            (const_int 0)))]
  12416. +  "")
  12417. +
  12418. +;; maskir insn.  We need four forms because things might be in arbitrary
  12419. +;; orders.  Don't define forms that only set CR fields because these
  12420. +;; would modify an input register.
  12421. +
  12422. +(define_insn "*maskir_internal1"
  12423. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12424. +    (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
  12425. +            (match_operand:SI 1 "gpc_reg_operand" "0"))
  12426. +        (and:SI (match_dup 2)
  12427. +            (match_operand:SI 3 "gpc_reg_operand" "r"))))]
  12428. +  "TARGET_POWER"
  12429. +  "maskir %0,%3,%2")
  12430. +
  12431. +(define_insn "*maskir_internal2"
  12432. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12433. +    (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
  12434. +            (match_operand:SI 1 "gpc_reg_operand" "0"))
  12435. +        (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12436. +            (match_dup 2))))]
  12437. +  "TARGET_POWER"
  12438. +  "maskir %0,%3,%2")
  12439. +
  12440. +(define_insn "*maskir_internal3"
  12441. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12442. +    (ior:SI (and:SI (match_operand:SI 2 "gpc_reg_operand" "r")
  12443. +            (match_operand:SI 3 "gpc_reg_operand" "r"))
  12444. +        (and:SI (not:SI (match_dup 2))
  12445. +            (match_operand:SI 1 "gpc_reg_operand" "0"))))]
  12446. +  "TARGET_POWER"
  12447. +  "maskir %0,%3,%2")
  12448. +
  12449. +(define_insn "*maskir_internal4"
  12450. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12451. +    (ior:SI (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12452. +            (match_operand:SI 2 "gpc_reg_operand" "r"))
  12453. +        (and:SI (not:SI (match_dup 2))
  12454. +            (match_operand:SI 1 "gpc_reg_operand" "0"))))]
  12455. +  "TARGET_POWER"
  12456. +  "maskir %0,%3,%2")
  12457. +
  12458. +(define_insn "*maskir_internal5"
  12459. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  12460. +    (compare:CC
  12461. +     (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
  12462. +             (match_operand:SI 1 "gpc_reg_operand" "0"))
  12463. +         (and:SI (match_dup 2)
  12464. +             (match_operand:SI 3 "gpc_reg_operand" "r")))
  12465. +     (const_int 0)))
  12466. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12467. +    (ior:SI (and:SI (not:SI (match_dup 2)) (match_dup 1))
  12468. +        (and:SI (match_dup 2) (match_dup 3))))]
  12469. +  "TARGET_POWER"
  12470. +  "maskir. %0,%3,%2"
  12471. +  [(set_attr "type" "compare")])
  12472. +
  12473. +(define_insn "*maskir_internal6"
  12474. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  12475. +    (compare:CC
  12476. +     (ior:SI (and:SI (not:SI (match_operand:SI 2 "gpc_reg_operand" "r"))
  12477. +             (match_operand:SI 1 "gpc_reg_operand" "0"))
  12478. +         (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12479. +             (match_dup 2)))
  12480. +     (const_int 0)))
  12481. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12482. +    (ior:SI (and:SI (not:SI (match_dup 2)) (match_dup 1))
  12483. +        (and:SI (match_dup 3) (match_dup 2))))]
  12484. +  "TARGET_POWER"
  12485. +  "maskir. %0,%3,%2"
  12486. +  [(set_attr "type" "compare")])
  12487. +
  12488. +(define_insn "*maskir_internal7"
  12489. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  12490. +    (compare:CC
  12491. +     (ior:SI (and:SI (match_operand:SI 2 "gpc_reg_operand" "r")
  12492. +             (match_operand:SI 3 "gpc_reg_operand" "r"))
  12493. +         (and:SI (not:SI (match_dup 2))
  12494. +             (match_operand:SI 1 "gpc_reg_operand" "0")))
  12495. +     (const_int 0)))
  12496. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12497. +    (ior:SI (and:SI (match_dup 2) (match_dup 3))
  12498. +        (and:SI (not:SI (match_dup 2)) (match_dup 1))))]
  12499. +  "TARGET_POWER"
  12500. +  "maskir. %0,%3,%2"
  12501. +  [(set_attr "type" "compare")])
  12502. +
  12503. +(define_insn "*maskir_internal8"
  12504. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  12505. +    (compare:CC
  12506. +     (ior:SI (and:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12507. +             (match_operand:SI 2 "gpc_reg_operand" "r"))
  12508. +         (and:SI (not:SI (match_dup 2))
  12509. +             (match_operand:SI 1 "gpc_reg_operand" "0")))
  12510. +     (const_int 0)))
  12511. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12512. +    (ior:SI (and:SI (match_dup 3) (match_dup 2))
  12513. +        (and:SI (not:SI (match_dup 2)) (match_dup 1))))]
  12514. +  "TARGET_POWER"
  12515. +  "maskir. %0,%3,%2"
  12516. +  [(set_attr "type" "compare")])
  12517. +
  12518. +;; Rotate and shift insns, in all their variants.  These support shifts,
  12519. +;; field inserts and extracts, and various combinations thereof.
  12520. +(define_expand "insv"
  12521. +  [(set (zero_extract (match_operand 0 "gpc_reg_operand" "")
  12522. +               (match_operand:SI 1 "const_int_operand" "")
  12523. +               (match_operand:SI 2 "const_int_operand" ""))
  12524. +    (match_operand 3 "gpc_reg_operand" ""))]
  12525. +  ""
  12526. +  "
  12527. +{
  12528. +  /* Do not handle 16/8 bit structures that fit in HI/QI modes directly, since
  12529. +     the (SUBREG:SI (REG:HI xxx)) that is otherwise generated can confuse the
  12530. +     compiler if the address of the structure is taken later.  */
  12531. +  if (GET_CODE (operands[0]) == SUBREG
  12532. +      && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[0]))) < UNITS_PER_WORD))
  12533. +    FAIL;
  12534. +
  12535. +  if (TARGET_POWERPC64 && GET_MODE (operands[0]) == DImode)
  12536. +    emit_insn (gen_insvdi (operands[0], operands[1], operands[2], operands[3]));
  12537. +  else
  12538. +    emit_insn (gen_insvsi (operands[0], operands[1], operands[2], operands[3]));
  12539. +  DONE;
  12540. +}")
  12541. +
  12542. +(define_insn "insvsi"
  12543. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  12544. +             (match_operand:SI 1 "const_int_operand" "i")
  12545. +             (match_operand:SI 2 "const_int_operand" "i"))
  12546. +    (match_operand:SI 3 "gpc_reg_operand" "r"))]
  12547. +  ""
  12548. +  "*
  12549. +{
  12550. +  int start = INTVAL (operands[2]) & 31;
  12551. +  int size = INTVAL (operands[1]) & 31;
  12552. +
  12553. +  operands[4] = GEN_INT (32 - start - size);
  12554. +  operands[1] = GEN_INT (start + size - 1);
  12555. +  return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
  12556. +}")
  12557. +
  12558. +(define_insn "*insvsi_internal1"
  12559. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  12560. +             (match_operand:SI 1 "const_int_operand" "i")
  12561. +             (match_operand:SI 2 "const_int_operand" "i"))
  12562. +    (ashift:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12563. +           (match_operand:SI 4 "const_int_operand" "i")))]
  12564. +  "(32 - (INTVAL (operands[4]) & 31)) >= INTVAL (operands[1])"
  12565. +  "*
  12566. +{
  12567. +  int shift = INTVAL (operands[4]) & 31;
  12568. +  int start = INTVAL (operands[2]) & 31;
  12569. +  int size = INTVAL (operands[1]) & 31;
  12570. +
  12571. +  operands[4] = GEN_INT (shift - start - size);
  12572. +  operands[1] = GEN_INT (start + size - 1);
  12573. +  return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
  12574. +}")
  12575. +
  12576. +(define_insn "*insvsi_internal2"
  12577. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  12578. +             (match_operand:SI 1 "const_int_operand" "i")
  12579. +             (match_operand:SI 2 "const_int_operand" "i"))
  12580. +    (ashiftrt:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12581. +             (match_operand:SI 4 "const_int_operand" "i")))]
  12582. +  "(32 - (INTVAL (operands[4]) & 31)) >= INTVAL (operands[1])"
  12583. +  "*
  12584. +{
  12585. +  int shift = INTVAL (operands[4]) & 31;
  12586. +  int start = INTVAL (operands[2]) & 31;
  12587. +  int size = INTVAL (operands[1]) & 31;
  12588. +
  12589. +  operands[4] = GEN_INT (32 - shift - start - size);
  12590. +  operands[1] = GEN_INT (start + size - 1);
  12591. +  return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
  12592. +}")
  12593. +
  12594. +(define_insn "*insvsi_internal3"
  12595. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  12596. +             (match_operand:SI 1 "const_int_operand" "i")
  12597. +             (match_operand:SI 2 "const_int_operand" "i"))
  12598. +    (lshiftrt:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12599. +             (match_operand:SI 4 "const_int_operand" "i")))]
  12600. +  "(32 - (INTVAL (operands[4]) & 31)) >= INTVAL (operands[1])"
  12601. +  "*
  12602. +{
  12603. +  int shift = INTVAL (operands[4]) & 31;
  12604. +  int start = INTVAL (operands[2]) & 31;
  12605. +  int size = INTVAL (operands[1]) & 31;
  12606. +
  12607. +  operands[4] = GEN_INT (32 - shift - start - size);
  12608. +  operands[1] = GEN_INT (start + size - 1);
  12609. +  return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
  12610. +}")
  12611. +
  12612. +(define_insn "*insvsi_internal4"
  12613. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  12614. +             (match_operand:SI 1 "const_int_operand" "i")
  12615. +             (match_operand:SI 2 "const_int_operand" "i"))
  12616. +    (zero_extract:SI (match_operand:SI 3 "gpc_reg_operand" "r")
  12617. +             (match_operand:SI 4 "const_int_operand" "i")
  12618. +             (match_operand:SI 5 "const_int_operand" "i")))]
  12619. +  "INTVAL (operands[4]) >= INTVAL (operands[1])"
  12620. +  "*
  12621. +{
  12622. +  int extract_start = INTVAL (operands[5]) & 31;
  12623. +  int extract_size = INTVAL (operands[4]) & 31;
  12624. +  int insert_start = INTVAL (operands[2]) & 31;
  12625. +  int insert_size = INTVAL (operands[1]) & 31;
  12626. +
  12627. +/* Align extract field with insert field */
  12628. +  operands[5] = GEN_INT (extract_start + extract_size - insert_start - insert_size);
  12629. +  operands[1] = GEN_INT (insert_start + insert_size - 1);
  12630. +  return \"{rlimi|rlwimi} %0,%3,%h5,%h2,%h1\";
  12631. +}")
  12632. +
  12633. +(define_insn "insvdi"
  12634. +  [(set (zero_extract:DI (match_operand:DI 0 "gpc_reg_operand" "+r")
  12635. +             (match_operand:SI 1 "const_int_operand" "i")
  12636. +             (match_operand:SI 2 "const_int_operand" "i"))
  12637. +    (match_operand:DI 3 "gpc_reg_operand" "r"))]
  12638. +  "TARGET_POWERPC64"
  12639. +  "*
  12640. +{
  12641. +  int start = INTVAL (operands[2]) & 63;
  12642. +  int size = INTVAL (operands[1]) & 63;
  12643. +
  12644. +  operands[1] = GEN_INT (64 - start - size);
  12645. +  return \"rldimi %0,%3,%H1,%H2\";
  12646. +}")
  12647. +
  12648. +(define_expand "extzv"
  12649. +  [(set (match_operand 0 "gpc_reg_operand" "")
  12650. +    (zero_extract (match_operand 1 "gpc_reg_operand" "")
  12651. +               (match_operand:SI 2 "const_int_operand" "")
  12652. +               (match_operand:SI 3 "const_int_operand" "")))]
  12653. +  ""
  12654. +  "
  12655. +{
  12656. +  /* Do not handle 16/8 bit structures that fit in HI/QI modes directly, since
  12657. +     the (SUBREG:SI (REG:HI xxx)) that is otherwise generated can confuse the
  12658. +     compiler if the address of the structure is taken later.  */
  12659. +  if (GET_CODE (operands[0]) == SUBREG
  12660. +      && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[0]))) < UNITS_PER_WORD))
  12661. +    FAIL;
  12662. +
  12663. +  if (TARGET_POWERPC64 && GET_MODE (operands[1]) == DImode)
  12664. +    emit_insn (gen_extzvdi (operands[0], operands[1], operands[2], operands[3]));
  12665. +  else
  12666. +    emit_insn (gen_extzvsi (operands[0], operands[1], operands[2], operands[3]));
  12667. +  DONE;
  12668. +}")
  12669. +
  12670. +(define_insn "extzvsi"
  12671. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12672. +    (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12673. +             (match_operand:SI 2 "const_int_operand" "i")
  12674. +             (match_operand:SI 3 "const_int_operand" "i")))]
  12675. +  ""
  12676. +  "*
  12677. +{
  12678. +  int start = INTVAL (operands[3]) & 31;
  12679. +  int size = INTVAL (operands[2]) & 31;
  12680. +
  12681. +  if (start + size >= 32)
  12682. +    operands[3] = const0_rtx;
  12683. +  else
  12684. +    operands[3] = GEN_INT (start + size);
  12685. +  return \"{rlinm|rlwinm} %0,%1,%3,%s2,31\";
  12686. +}")
  12687. +
  12688. +(define_insn "*extzvsi_internal1"
  12689. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  12690. +    (compare:CC (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12691. +             (match_operand:SI 2 "const_int_operand" "i")
  12692. +             (match_operand:SI 3 "const_int_operand" "i"))
  12693. +            (const_int 0)))
  12694. +   (clobber (match_scratch:SI 4 "=r"))]
  12695. +  "! TARGET_POWERPC64"
  12696. +  "*
  12697. +{
  12698. +  int start = INTVAL (operands[3]) & 31;
  12699. +  int size = INTVAL (operands[2]) & 31;
  12700. +
  12701. +  /* If the bitfield being tested fits in the upper or lower half of a
  12702. +     word, it is possible to use andiu. or andil. to test it.  This is
  12703. +     useful because the condition register set-use delay is smaller for
  12704. +     andi[ul]. than for rlinm.  This doesn't work when the starting bit
  12705. +     position is 0 because the LT and GT bits may be set wrong.  */
  12706. +
  12707. +  if ((start > 0 && start + size <= 16) || start >= 16)
  12708. +    {
  12709. +      operands[3] = GEN_INT (((1 << (16 - (start & 15)))
  12710. +                  - (1 << (16 - (start & 15) - size))));
  12711. +      if (start < 16)
  12712. +    return \"{andiu.|andis.} %4,%1,%3\";
  12713. +      else
  12714. +    return \"{andil.|andi.} %4,%1,%3\";
  12715. +    }
  12716. +
  12717. +  if (start + size >= 32)
  12718. +    operands[3] = const0_rtx;
  12719. +  else
  12720. +    operands[3] = GEN_INT (start + size);
  12721. +  return \"{rlinm.|rlwinm.} %4,%1,%3,%s2,31\";
  12722. +}"
  12723. +  [(set_attr "type" "compare")])
  12724. +
  12725. +(define_insn "*extzvsi_internal2"
  12726. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  12727. +    (compare:CC (zero_extract:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12728. +             (match_operand:SI 2 "const_int_operand" "i")
  12729. +             (match_operand:SI 3 "const_int_operand" "i"))
  12730. +            (const_int 0)))
  12731. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12732. +    (zero_extract:SI (match_dup 1) (match_dup 2) (match_dup 3)))]
  12733. +  "! TARGET_POWERPC64"
  12734. +  "*
  12735. +{
  12736. +  int start = INTVAL (operands[3]) & 31;
  12737. +  int size = INTVAL (operands[2]) & 31;
  12738. +
  12739. +  if (start >= 16 && start + size == 32)
  12740. +    {
  12741. +      operands[3] = GEN_INT ((1 << (32 - start)) - 1);
  12742. +      return \"{andil.|andi.} %0,%1,%3\";
  12743. +    }
  12744. +
  12745. +  if (start + size >= 32)
  12746. +    operands[3] = const0_rtx;
  12747. +  else
  12748. +    operands[3] = GEN_INT (start + size);
  12749. +  return \"{rlinm.|rlwinm.} %0,%1,%3,%s2,31\";
  12750. +}"
  12751. +  [(set_attr "type" "delayed_compare")])
  12752. +
  12753. +(define_insn "extzvdi"
  12754. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  12755. +    (zero_extract:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  12756. +             (match_operand:SI 2 "const_int_operand" "i")
  12757. +             (match_operand:SI 3 "const_int_operand" "i")))]
  12758. +  "TARGET_POWERPC64"
  12759. +  "*
  12760. +{
  12761. +  int start = INTVAL (operands[3]) & 63;
  12762. +  int size = INTVAL (operands[2]) & 63;
  12763. +
  12764. +  if (start + size >= 64)
  12765. +    operands[3] = const0_rtx;
  12766. +  else
  12767. +    operands[3] = GEN_INT (start + size);
  12768. +  operands[2] = GEN_INT (64 - size);
  12769. +  return \"rldicl %0,%1,%3,%2\";
  12770. +}")
  12771. +
  12772. +(define_insn "*extzvdi_internal1"
  12773. +  [(set (match_operand:CC 0 "gpc_reg_operand" "=x")
  12774. +    (compare:CC (zero_extract:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  12775. +             (match_operand:SI 2 "const_int_operand" "i")
  12776. +             (match_operand:SI 3 "const_int_operand" "i"))
  12777. +            (const_int 0)))
  12778. +   (clobber (match_scratch:DI 4 "=r"))]
  12779. +  "TARGET_POWERPC64"
  12780. +  "*
  12781. +{
  12782. +  int start = INTVAL (operands[3]) & 63;
  12783. +  int size = INTVAL (operands[2]) & 63;
  12784. +
  12785. +  if (start + size >= 64)
  12786. +    operands[3] = const0_rtx;
  12787. +  else
  12788. +    operands[3] = GEN_INT (start + size);
  12789. +  operands[2] = GEN_INT (64 - size);
  12790. +  return \"rldicl. %4,%1,%3,%2\";
  12791. +}")
  12792. +
  12793. +(define_insn "*extzvdi_internal2"
  12794. +  [(set (match_operand:CC 4 "gpc_reg_operand" "=x")
  12795. +    (compare:CC (zero_extract:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  12796. +             (match_operand:SI 2 "const_int_operand" "i")
  12797. +             (match_operand:SI 3 "const_int_operand" "i"))
  12798. +            (const_int 0)))
  12799. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  12800. +    (zero_extract:DI (match_dup 1) (match_dup 2) (match_dup 3)))]
  12801. +  "TARGET_POWERPC64"
  12802. +  "*
  12803. +{
  12804. +  int start = INTVAL (operands[3]) & 63;
  12805. +  int size = INTVAL (operands[2]) & 63;
  12806. +
  12807. +  if (start + size >= 64)
  12808. +    operands[3] = const0_rtx;
  12809. +  else
  12810. +    operands[3] = GEN_INT (start + size);
  12811. +  operands[2] = GEN_INT (64 - size);
  12812. +  return \"rldicl. %0,%1,%3,%2\";
  12813. +}")
  12814. +
  12815. +(define_insn "rotlsi3"
  12816. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12817. +    (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12818. +           (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
  12819. +  ""
  12820. +  "{rl%I2nm|rlw%I2nm} %0,%1,%h2,0xffffffff")
  12821. +
  12822. +(define_insn "*rotlsi3_internal2"
  12823. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  12824. +    (compare:CC (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12825. +                   (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  12826. +            (const_int 0)))
  12827. +   (clobber (match_scratch:SI 3 "=r"))]
  12828. +  "! TARGET_POWERPC64"
  12829. +  "{rl%I2nm.|rlw%I2nm.} %3,%1,%h2,0xffffffff"
  12830. +  [(set_attr "type" "delayed_compare")])
  12831. +
  12832. +(define_insn "*rotlsi3_internal3"
  12833. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  12834. +    (compare:CC (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12835. +                   (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  12836. +            (const_int 0)))
  12837. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12838. +    (rotate:SI (match_dup 1) (match_dup 2)))]
  12839. +  "! TARGET_POWERPC64"
  12840. +  "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,0xffffffff"
  12841. +  [(set_attr "type" "delayed_compare")])
  12842. +
  12843. +(define_insn "*rotlsi3_internal4"
  12844. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12845. +    (and:SI (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12846. +               (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  12847. +        (match_operand:SI 3 "mask_operand" "T")))]
  12848. +  ""
  12849. +  "{rl%I2nm|rlw%I2nm} %0,%1,%h2,%m3,%M3")
  12850. +
  12851. +(define_insn "*rotlsi3_internal5"
  12852. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  12853. +    (compare:CC (and:SI
  12854. +             (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12855. +                (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  12856. +             (match_operand:SI 3 "mask_operand" "T"))
  12857. +            (const_int 0)))
  12858. +   (clobber (match_scratch:SI 4 "=r"))]
  12859. +  "! TARGET_POWERPC64"
  12860. +  "{rl%I2nm.|rlw%I2nm.} %4,%1,%h2,%m3,%M3"
  12861. +  [(set_attr "type" "delayed_compare")])
  12862. +
  12863. +(define_insn "*rotlsi3_internal6"
  12864. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  12865. +    (compare:CC (and:SI
  12866. +             (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12867. +                (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  12868. +             (match_operand:SI 3 "mask_operand" "T"))
  12869. +            (const_int 0)))
  12870. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12871. +    (and:SI (rotate:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
  12872. +  "! TARGET_POWERPC64"
  12873. +  "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,%m3,%M3"
  12874. +  [(set_attr "type" "delayed_compare")])
  12875. +
  12876. +(define_insn "*rotlsi3_internal7"
  12877. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12878. +    (zero_extend:SI
  12879. +     (subreg:QI
  12880. +      (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12881. +             (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
  12882. +  ""
  12883. +  "{rl%I2nm|rlw%I2nm} %0,%1,%h2,0xff")
  12884. +
  12885. +(define_insn "*rotlsi3_internal8"
  12886. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  12887. +    (compare:CC (zero_extend:SI
  12888. +             (subreg:QI
  12889. +              (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12890. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
  12891. +            (const_int 0)))
  12892. +   (clobber (match_scratch:SI 3 "=r"))]
  12893. +  ""
  12894. +  "{rl%I2nm.|rlw%I2nm.} %3,%1,%h2,0xff"
  12895. +  [(set_attr "type" "delayed_compare")])
  12896. +
  12897. +(define_insn "*rotlsi3_internal9"
  12898. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  12899. +    (compare:CC (zero_extend:SI
  12900. +             (subreg:QI
  12901. +              (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12902. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
  12903. +            (const_int 0)))
  12904. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12905. +    (zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
  12906. +  ""
  12907. +  "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,0xff"
  12908. +  [(set_attr "type" "delayed_compare")])
  12909. +
  12910. +(define_insn "*rotlsi3_internal10"
  12911. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12912. +    (zero_extend:SI
  12913. +     (subreg:HI
  12914. +      (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12915. +             (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]
  12916. +  ""
  12917. +  "{rl%I2nm|rlw%I2nm} %0,%1,%h2,0xffff")
  12918. +
  12919. +(define_insn "*rotlsi3_internal11"
  12920. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  12921. +    (compare:CC (zero_extend:SI
  12922. +             (subreg:HI
  12923. +              (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12924. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
  12925. +            (const_int 0)))
  12926. +   (clobber (match_scratch:SI 3 "=r"))]
  12927. +  ""
  12928. +  "{rl%I2nm.|rlw%I2nm.} %3,%1,%h2,0xffff"
  12929. +  [(set_attr "type" "delayed_compare")])
  12930. +
  12931. +(define_insn "*rotlsi3_internal12"
  12932. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  12933. +    (compare:CC (zero_extend:SI
  12934. +             (subreg:HI
  12935. +              (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12936. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))
  12937. +            (const_int 0)))
  12938. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12939. +    (zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]
  12940. +  ""
  12941. +  "{rl%I2nm.|rlw%I2nm.} %0,%1,%h2,0xffff"
  12942. +  [(set_attr "type" "delayed_compare")])
  12943. +
  12944. +;; Note that we use "sle." instead of "sl." so that we can set
  12945. +;; SHIFT_COUNT_TRUNCATED.
  12946. +
  12947. +(define_expand "ashlsi3"
  12948. +  [(use (match_operand:SI 0 "gpc_reg_operand" ""))
  12949. +   (use (match_operand:SI 1 "gpc_reg_operand" ""))
  12950. +   (use (match_operand:SI 2 "reg_or_cint_operand" ""))]
  12951. +  ""
  12952. +  "
  12953. +{
  12954. +  if (TARGET_POWER)
  12955. +    emit_insn (gen_ashlsi3_power (operands[0], operands[1], operands[2]));
  12956. +  else
  12957. +    emit_insn (gen_ashlsi3_no_power (operands[0], operands[1], operands[2]));
  12958. +  DONE;
  12959. +}")
  12960. +
  12961. +(define_insn "ashlsi3_power"
  12962. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  12963. +    (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  12964. +           (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
  12965. +   (clobber (match_scratch:SI 3 "=q,X"))]
  12966. +  "TARGET_POWER"
  12967. +  "@
  12968. +   sle %0,%1,%2
  12969. +   {sli|slwi} %0,%1,%h2")
  12970. +
  12971. +(define_insn "ashlsi3_no_power"
  12972. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  12973. +    (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12974. +           (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
  12975. +  "! TARGET_POWER"
  12976. +  "{sl|slw}%I2 %0,%1,%h2")
  12977. +
  12978. +(define_insn ""
  12979. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  12980. +    (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  12981. +                   (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
  12982. +            (const_int 0)))
  12983. +   (clobber (match_scratch:SI 3 "=r,r"))
  12984. +   (clobber (match_scratch:SI 4 "=q,X"))]
  12985. +  "TARGET_POWER"
  12986. +  "@
  12987. +   sle. %3,%1,%2
  12988. +   {sli.|slwi.} %3,%1,%h2"
  12989. +  [(set_attr "type" "delayed_compare")])
  12990. +
  12991. +(define_insn ""
  12992. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  12993. +    (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  12994. +                   (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  12995. +            (const_int 0)))
  12996. +   (clobber (match_scratch:SI 3 "=r"))]
  12997. +  "! TARGET_POWER && ! TARGET_POWERPC64"
  12998. +  "{sl|slw}%I2. %3,%1,%h2"
  12999. +  [(set_attr "type" "delayed_compare")])
  13000. +
  13001. +(define_insn ""
  13002. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  13003. +    (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13004. +                   (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
  13005. +            (const_int 0)))
  13006. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  13007. +    (ashift:SI (match_dup 1) (match_dup 2)))
  13008. +   (clobber (match_scratch:SI 4 "=q,X"))]
  13009. +  "TARGET_POWER"
  13010. +  "@
  13011. +   sle. %0,%1,%2
  13012. +   {sli.|slwi.} %0,%1,%h2"
  13013. +  [(set_attr "type" "delayed_compare")])
  13014. +
  13015. +(define_insn ""
  13016. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  13017. +    (compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13018. +                   (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  13019. +            (const_int 0)))
  13020. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13021. +    (ashift:SI (match_dup 1) (match_dup 2)))]
  13022. +  "! TARGET_POWER && ! TARGET_POWERPC64"
  13023. +  "{sl|slw}%I2. %0,%1,%h2"
  13024. +  [(set_attr "type" "delayed_compare")])
  13025. +
  13026. +(define_insn ""
  13027. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13028. +    (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13029. +               (match_operand:SI 2 "const_int_operand" "i"))
  13030. +        (match_operand:SI 3 "mask_operand" "T")))]
  13031. +  "includes_lshift_p (operands[2], operands[3])"
  13032. +  "{rlinm|rlwinm} %0,%1,%h2,%m3,%M3")
  13033. +
  13034. +(define_insn ""
  13035. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  13036. +    (compare:CC
  13037. +     (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13038. +                (match_operand:SI 2 "const_int_operand" "i"))
  13039. +         (match_operand:SI 3 "mask_operand" "T"))
  13040. +     (const_int 0)))
  13041. +   (clobber (match_scratch:SI 4 "=r"))]
  13042. +  "! TARGET_POWERPC64 && includes_lshift_p (operands[2], operands[3])"
  13043. +  "{rlinm.|rlwinm.} %4,%1,%h2,%m3,%M3"
  13044. +  [(set_attr "type" "delayed_compare")])
  13045. +
  13046. +(define_insn ""
  13047. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  13048. +    (compare:CC
  13049. +     (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13050. +                (match_operand:SI 2 "const_int_operand" "i"))
  13051. +         (match_operand:SI 3 "mask_operand" "T"))
  13052. +     (const_int 0)))
  13053. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13054. +    (and:SI (ashift:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
  13055. +  "! TARGET_POWERPC64 && includes_lshift_p (operands[2], operands[3])"
  13056. +  "{rlinm.|rlwinm.} %0,%1,%h2,%m3,%M3"
  13057. +  [(set_attr "type" "delayed_compare")])
  13058. +
  13059. +;; The AIX assembler mis-handles "sri x,x,0", so write that case as
  13060. +;; "sli x,x,0".
  13061. +(define_expand "lshrsi3"
  13062. +  [(use (match_operand:SI 0 "gpc_reg_operand" ""))
  13063. +   (use (match_operand:SI 1 "gpc_reg_operand" ""))
  13064. +   (use (match_operand:SI 2 "reg_or_cint_operand" ""))]
  13065. +  ""
  13066. +  "
  13067. +{
  13068. +  if (TARGET_POWER)
  13069. +    emit_insn (gen_lshrsi3_power (operands[0], operands[1], operands[2]));
  13070. +  else
  13071. +    emit_insn (gen_lshrsi3_no_power (operands[0], operands[1], operands[2]));
  13072. +  DONE;
  13073. +}")
  13074. +
  13075. +(define_insn "lshrsi3_power"
  13076. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
  13077. +    (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r")
  13078. +             (match_operand:SI 2 "reg_or_cint_operand" "r,O,i")))
  13079. +   (clobber (match_scratch:SI 3 "=q,X,X"))]
  13080. +  "TARGET_POWER"
  13081. +  "@
  13082. +  sre %0,%1,%2
  13083. +  mr %0,%1
  13084. +  {s%A2i|s%A2wi} %0,%1,%h2")
  13085. +
  13086. +(define_insn "lshrsi3_no_power"
  13087. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  13088. +    (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13089. +             (match_operand:SI 2 "reg_or_cint_operand" "O,ri")))]
  13090. +  "! TARGET_POWER"
  13091. +  "@
  13092. +  mr %0,%1
  13093. +  {sr|srw}%I2 %0,%1,%h2")
  13094. +
  13095. +(define_insn ""
  13096. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x")
  13097. +    (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r")
  13098. +                 (match_operand:SI 2 "reg_or_cint_operand" "r,O,i"))
  13099. +            (const_int 0)))
  13100. +   (clobber (match_scratch:SI 3 "=r,X,r"))
  13101. +   (clobber (match_scratch:SI 4 "=q,X,X"))]
  13102. +  "TARGET_POWER"
  13103. +  "@
  13104. +  sre. %3,%1,%2
  13105. +  mr. %1,%1
  13106. +  {s%A2i.|s%A2wi.} %3,%1,%h2"
  13107. +  [(set_attr "type" "delayed_compare")])
  13108. +
  13109. +(define_insn ""
  13110. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  13111. +    (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13112. +                 (match_operand:SI 2 "reg_or_cint_operand" "O,ri"))
  13113. +            (const_int 0)))
  13114. +   (clobber (match_scratch:SI 3 "=X,r"))]
  13115. +  "! TARGET_POWER && ! TARGET_POWERPC64"
  13116. +  "@
  13117. +   mr. %1,%1
  13118. +   {sr|srw}%I2. %3,%1,%h2"
  13119. +  [(set_attr "type" "delayed_compare")])
  13120. +
  13121. +(define_insn ""
  13122. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x")
  13123. +    (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r,r")
  13124. +                 (match_operand:SI 2 "reg_or_cint_operand" "r,O,i"))
  13125. +            (const_int 0)))
  13126. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
  13127. +    (lshiftrt:SI (match_dup 1) (match_dup 2)))
  13128. +   (clobber (match_scratch:SI 4 "=q,X,X"))]
  13129. +  "TARGET_POWER"
  13130. +  "@
  13131. +  sre. %0,%1,%2
  13132. +  mr. %0,%1
  13133. +  {s%A2i.|s%A2wi.} %0,%1,%h2"
  13134. +  [(set_attr "type" "delayed_compare")])
  13135. +
  13136. +(define_insn ""
  13137. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  13138. +    (compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13139. +                 (match_operand:SI 2 "reg_or_cint_operand" "O,ri"))
  13140. +            (const_int 0)))
  13141. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  13142. +    (lshiftrt:SI (match_dup 1) (match_dup 2)))]
  13143. +  "! TARGET_POWER && ! TARGET_POWERPC64"
  13144. +  "@
  13145. +   mr. %0,%1
  13146. +   {sr|srw}%I2. %0,%1,%h2"
  13147. +  [(set_attr "type" "delayed_compare")])
  13148. +
  13149. +(define_insn ""
  13150. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13151. +    (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13152. +                 (match_operand:SI 2 "const_int_operand" "i"))
  13153. +        (match_operand:SI 3 "mask_operand" "T")))]
  13154. +  "includes_rshift_p (operands[2], operands[3])"
  13155. +  "{rlinm|rlwinm} %0,%1,%s2,%m3,%M3")
  13156. +
  13157. +(define_insn ""
  13158. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  13159. +    (compare:CC
  13160. +     (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13161. +                  (match_operand:SI 2 "const_int_operand" "i"))
  13162. +         (match_operand:SI 3 "mask_operand" "T"))
  13163. +     (const_int 0)))
  13164. +   (clobber (match_scratch:SI 4 "=r"))]
  13165. +  "! TARGET_POWERPC64 && includes_rshift_p (operands[2], operands[3])"
  13166. +  "{rlinm.|rlwinm.} %4,%1,%s2,%m3,%M3"
  13167. +  [(set_attr "type" "delayed_compare")])
  13168. +
  13169. +(define_insn ""
  13170. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  13171. +    (compare:CC
  13172. +     (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13173. +                  (match_operand:SI 2 "const_int_operand" "i"))
  13174. +         (match_operand:SI 3 "mask_operand" "T"))
  13175. +     (const_int 0)))
  13176. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13177. +    (and:SI (lshiftrt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
  13178. +  "! TARGET_POWERPC64 && includes_rshift_p (operands[2], operands[3])"
  13179. +  "{rlinm.|rlwinm.} %0,%1,%s2,%m3,%M3"
  13180. +  [(set_attr "type" "delayed_compare")])
  13181. +
  13182. +(define_insn ""
  13183. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13184. +    (zero_extend:SI
  13185. +     (subreg:QI
  13186. +      (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13187. +               (match_operand:SI 2 "const_int_operand" "i")) 0)))]
  13188. +  "includes_rshift_p (operands[2], GEN_INT (255))"
  13189. +  "{rlinm|rlwinm} %0,%1,%s2,0xff")
  13190. +
  13191. +(define_insn ""
  13192. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  13193. +    (compare:CC
  13194. +     (zero_extend:SI
  13195. +      (subreg:QI
  13196. +       (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13197. +            (match_operand:SI 2 "const_int_operand" "i")) 0))
  13198. +     (const_int 0)))
  13199. +   (clobber (match_scratch:SI 3 "=r"))]
  13200. +  "includes_rshift_p (operands[2], GEN_INT (255))"
  13201. +  "{rlinm.|rlwinm.} %3,%1,%s2,0xff"
  13202. +  [(set_attr "type" "delayed_compare")])
  13203. +
  13204. +(define_insn ""
  13205. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  13206. +    (compare:CC
  13207. +     (zero_extend:SI
  13208. +      (subreg:QI
  13209. +       (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13210. +            (match_operand:SI 2 "const_int_operand" "i")) 0))
  13211. +     (const_int 0)))
  13212. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13213. +    (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
  13214. +  "includes_rshift_p (operands[2], GEN_INT (255))"
  13215. +  "{rlinm.|rlwinm.} %0,%1,%s2,0xff"
  13216. +  [(set_attr "type" "delayed_compare")])
  13217. +
  13218. +(define_insn ""
  13219. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13220. +    (zero_extend:SI
  13221. +     (subreg:HI
  13222. +      (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13223. +               (match_operand:SI 2 "const_int_operand" "i")) 0)))]
  13224. +  "includes_rshift_p (operands[2], GEN_INT (65535))"
  13225. +  "{rlinm|rlwinm} %0,%1,%s2,0xffff")
  13226. +
  13227. +(define_insn ""
  13228. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  13229. +    (compare:CC
  13230. +     (zero_extend:SI
  13231. +      (subreg:HI
  13232. +       (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13233. +            (match_operand:SI 2 "const_int_operand" "i")) 0))
  13234. +     (const_int 0)))
  13235. +   (clobber (match_scratch:SI 3 "=r"))]
  13236. +  "includes_rshift_p (operands[2], GEN_INT (65535))"
  13237. +  "{rlinm.|rlwinm.} %3,%1,%s2,0xffff"
  13238. +  [(set_attr "type" "delayed_compare")])
  13239. +
  13240. +(define_insn ""
  13241. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  13242. +    (compare:CC
  13243. +     (zero_extend:SI
  13244. +      (subreg:HI
  13245. +       (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13246. +            (match_operand:SI 2 "const_int_operand" "i")) 0))
  13247. +     (const_int 0)))
  13248. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13249. +    (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
  13250. +  "includes_rshift_p (operands[2], GEN_INT (65535))"
  13251. +  "{rlinm.|rlwinm.} %0,%1,%s2,0xffff"
  13252. +  [(set_attr "type" "delayed_compare")])
  13253. +
  13254. +(define_insn ""
  13255. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  13256. +             (const_int 1)
  13257. +             (match_operand:SI 1 "gpc_reg_operand" "r"))
  13258. +    (ashiftrt:SI (match_operand:SI 2 "gpc_reg_operand" "r")
  13259. +             (const_int 31)))]
  13260. +  "TARGET_POWER"
  13261. +  "rrib %0,%1,%2")
  13262. +
  13263. +(define_insn ""
  13264. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  13265. +             (const_int 1)
  13266. +             (match_operand:SI 1 "gpc_reg_operand" "r"))
  13267. +    (lshiftrt:SI (match_operand:SI 2 "gpc_reg_operand" "r")
  13268. +             (const_int 31)))]
  13269. +  "TARGET_POWER"
  13270. +  "rrib %0,%1,%2")
  13271. +
  13272. +(define_insn ""
  13273. +  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")
  13274. +             (const_int 1)
  13275. +             (match_operand:SI 1 "gpc_reg_operand" "r"))
  13276. +    (zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")
  13277. +             (const_int 1)
  13278. +             (const_int 0)))]
  13279. +  "TARGET_POWER"
  13280. +  "rrib %0,%1,%2")
  13281. +
  13282. +(define_expand "ashrsi3"
  13283. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  13284. +    (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "")
  13285. +             (match_operand:SI 2 "reg_or_cint_operand" "")))]
  13286. +  ""
  13287. +  "
  13288. +{
  13289. +  if (TARGET_POWER)
  13290. +    emit_insn (gen_ashrsi3_power (operands[0], operands[1], operands[2]));
  13291. +  else
  13292. +    emit_insn (gen_ashrsi3_no_power (operands[0], operands[1], operands[2]));
  13293. +  DONE;
  13294. +}")
  13295. +
  13296. +(define_insn "ashrsi3_power"
  13297. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  13298. +    (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13299. +             (match_operand:SI 2 "reg_or_cint_operand" "r,i")))
  13300. +   (clobber (match_scratch:SI 3 "=q,X"))]
  13301. +  "TARGET_POWER"
  13302. +  "@
  13303. +   srea %0,%1,%2
  13304. +   {srai|srawi} %0,%1,%h2")
  13305. +
  13306. +(define_insn "ashrsi3_no_power"
  13307. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13308. +    (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13309. +             (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
  13310. +  "! TARGET_POWER"
  13311. +  "{sra|sraw}%I2 %0,%1,%h2")
  13312. +
  13313. +(define_insn ""
  13314. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  13315. +    (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13316. +                 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
  13317. +            (const_int 0)))
  13318. +   (clobber (match_scratch:SI 3 "=r,r"))
  13319. +   (clobber (match_scratch:SI 4 "=q,X"))]
  13320. +  "TARGET_POWER"
  13321. +  "@
  13322. +   srea. %3,%1,%2
  13323. +   {srai.|srawi.} %3,%1,%h2"
  13324. +  [(set_attr "type" "delayed_compare")])
  13325. +
  13326. +(define_insn ""
  13327. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  13328. +    (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13329. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  13330. +            (const_int 0)))
  13331. +   (clobber (match_scratch:SI 3 "=r"))]
  13332. +  "! TARGET_POWER"
  13333. +  "{sra|sraw}%I2. %3,%1,%h2"
  13334. +  [(set_attr "type" "delayed_compare")])
  13335. +
  13336. +(define_insn ""
  13337. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  13338. +    (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  13339. +                 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))
  13340. +            (const_int 0)))
  13341. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  13342. +    (ashiftrt:SI (match_dup 1) (match_dup 2)))
  13343. +   (clobber (match_scratch:SI 4 "=q,X"))]
  13344. +  "TARGET_POWER"
  13345. +  "@
  13346. +   srea. %0,%1,%2
  13347. +   {srai.|srawi.} %0,%1,%h2"
  13348. +  [(set_attr "type" "delayed_compare")])
  13349. +
  13350. +(define_insn ""
  13351. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  13352. +    (compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  13353. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  13354. +            (const_int 0)))
  13355. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  13356. +    (ashiftrt:SI (match_dup 1) (match_dup 2)))]
  13357. +  "! TARGET_POWER"
  13358. +  "{sra|sraw}%I2. %0,%1,%h2"
  13359. +  [(set_attr "type" "delayed_compare")])
  13360. +
  13361. +;; Floating-point insns, excluding normal data motion.
  13362. +;;
  13363. +;; PowerPC has a full set of single-precision floating point instructions.
  13364. +;;
  13365. +;; For the POWER architecture, we pretend that we have both SFmode and
  13366. +;; DFmode insns, while, in fact, all fp insns are actually done in double.
  13367. +;; The only conversions we will do will be when storing to memory.  In that
  13368. +;; case, we will use the "frsp" instruction before storing.
  13369. +;;
  13370. +;; Note that when we store into a single-precision memory location, we need to
  13371. +;; use the frsp insn first.  If the register being stored isn't dead, we
  13372. +;; need a scratch register for the frsp.  But this is difficult when the store
  13373. +;; is done by reload.  It is not incorrect to do the frsp on the register in
  13374. +;; this case, we just lose precision that we would have otherwise gotten but
  13375. +;; is not guaranteed.  Perhaps this should be tightened up at some point.
  13376. +
  13377. +(define_insn "extendsfdf2"
  13378. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13379. +    (float_extend:DF (match_operand:SF 1 "gpc_reg_operand" "f")))]
  13380. +  "TARGET_HARD_FLOAT"
  13381. +  "*
  13382. +{
  13383. +  if (REGNO (operands[0]) == REGNO (operands[1]))
  13384. +    return \"\";
  13385. +  else
  13386. +    return \"fmr %0,%1\";
  13387. +}"
  13388. +  [(set_attr "type" "fp")])
  13389. +
  13390. +(define_insn "truncdfsf2"
  13391. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13392. +    (float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "f")))]
  13393. +  "TARGET_HARD_FLOAT"
  13394. +  "frsp %0,%1"
  13395. +  [(set_attr "type" "fp")])
  13396. +
  13397. +(define_insn "aux_truncdfsf2"
  13398. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13399. +    (unspec:SF [(match_operand:SF 1 "gpc_reg_operand" "f")] 0))]
  13400. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT"
  13401. +  "frsp %0,%1"
  13402. +  [(set_attr "type" "fp")])
  13403. +
  13404. +(define_insn "negsf2"
  13405. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13406. +    (neg:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
  13407. +  "TARGET_HARD_FLOAT"
  13408. +  "fneg %0,%1"
  13409. +  [(set_attr "type" "fp")])
  13410. +
  13411. +(define_insn "abssf2"
  13412. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13413. +    (abs:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
  13414. +  "TARGET_HARD_FLOAT"
  13415. +  "fabs %0,%1"
  13416. +  [(set_attr "type" "fp")])
  13417. +
  13418. +(define_insn ""
  13419. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13420. +    (neg:SF (abs:SF (match_operand:SF 1 "gpc_reg_operand" "f"))))]
  13421. +  "TARGET_HARD_FLOAT"
  13422. +  "fnabs %0,%1"
  13423. +  [(set_attr "type" "fp")])
  13424. +
  13425. +(define_expand "addsf3"
  13426. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13427. +    (plus:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13428. +         (match_operand:SF 2 "gpc_reg_operand" "")))]
  13429. +  "TARGET_HARD_FLOAT"
  13430. +  "")
  13431. +
  13432. +(define_insn ""
  13433. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13434. +    (plus:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13435. +         (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13436. +  "TARGET_POWERPC && TARGET_HARD_FLOAT"
  13437. +  "fadds %0,%1,%2"
  13438. +  [(set_attr "type" "fp")])
  13439. +
  13440. +(define_insn ""
  13441. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13442. +    (plus:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13443. +         (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13444. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT"
  13445. +  "{fa|fadd} %0,%1,%2"
  13446. +  [(set_attr "type" "fp")])
  13447. +
  13448. +(define_expand "subsf3"
  13449. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13450. +    (minus:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13451. +          (match_operand:SF 2 "gpc_reg_operand" "")))]
  13452. +  "TARGET_HARD_FLOAT"
  13453. +  "")
  13454. +
  13455. +(define_insn ""
  13456. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13457. +    (minus:SF (match_operand:SF 1 "gpc_reg_operand" "f")
  13458. +          (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13459. +  "TARGET_POWERPC && TARGET_HARD_FLOAT"
  13460. +  "fsubs %0,%1,%2"
  13461. +  [(set_attr "type" "fp")])
  13462. +
  13463. +(define_insn ""
  13464. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13465. +    (minus:SF (match_operand:SF 1 "gpc_reg_operand" "f")
  13466. +          (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13467. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT"
  13468. +  "{fs|fsub} %0,%1,%2"
  13469. +  [(set_attr "type" "fp")])
  13470. +
  13471. +(define_expand "mulsf3"
  13472. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13473. +    (mult:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13474. +         (match_operand:SF 2 "gpc_reg_operand" "")))]
  13475. +  "TARGET_HARD_FLOAT"
  13476. +  "")
  13477. +
  13478. +(define_insn ""
  13479. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13480. +    (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13481. +         (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13482. +  "TARGET_POWERPC && TARGET_HARD_FLOAT"
  13483. +  "fmuls %0,%1,%2"
  13484. +  [(set_attr "type" "fp")])
  13485. +
  13486. +(define_insn ""
  13487. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13488. +    (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13489. +         (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13490. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT"
  13491. +  "{fm|fmul} %0,%1,%2"
  13492. +  [(set_attr "type" "dmul")])
  13493. +
  13494. +(define_expand "divsf3"
  13495. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13496. +    (div:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13497. +        (match_operand:SF 2 "gpc_reg_operand" "")))]
  13498. +  "TARGET_HARD_FLOAT"
  13499. +  "")
  13500. +
  13501. +(define_insn ""
  13502. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13503. +    (div:SF (match_operand:SF 1 "gpc_reg_operand" "f")
  13504. +        (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13505. +  "TARGET_POWERPC && TARGET_HARD_FLOAT"
  13506. +  "fdivs %0,%1,%2"
  13507. +  [(set_attr "type" "sdiv")])
  13508. +
  13509. +(define_insn ""
  13510. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13511. +    (div:SF (match_operand:SF 1 "gpc_reg_operand" "f")
  13512. +        (match_operand:SF 2 "gpc_reg_operand" "f")))]
  13513. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT"
  13514. +  "{fd|fdiv} %0,%1,%2"
  13515. +  [(set_attr "type" "ddiv")])
  13516. +
  13517. +(define_insn ""
  13518. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13519. +    (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13520. +              (match_operand:SF 2 "gpc_reg_operand" "f"))
  13521. +         (match_operand:SF 3 "gpc_reg_operand" "f")))]
  13522. +  "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13523. +  "fmadds %0,%1,%2,%3"
  13524. +  [(set_attr "type" "fp")])
  13525. +
  13526. +(define_insn ""
  13527. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13528. +    (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13529. +              (match_operand:SF 2 "gpc_reg_operand" "f"))
  13530. +         (match_operand:SF 3 "gpc_reg_operand" "f")))]
  13531. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13532. +  "{fma|fmadd} %0,%1,%2,%3"
  13533. +  [(set_attr "type" "dmul")])
  13534. +
  13535. +(define_insn ""
  13536. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13537. +    (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13538. +               (match_operand:SF 2 "gpc_reg_operand" "f"))
  13539. +          (match_operand:SF 3 "gpc_reg_operand" "f")))]
  13540. +  "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13541. +  "fmsubs %0,%1,%2,%3"
  13542. +  [(set_attr "type" "fp")])
  13543. +
  13544. +(define_insn ""
  13545. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13546. +    (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13547. +               (match_operand:SF 2 "gpc_reg_operand" "f"))
  13548. +          (match_operand:SF 3 "gpc_reg_operand" "f")))]
  13549. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13550. +  "{fms|fmsub} %0,%1,%2,%3"
  13551. +  [(set_attr "type" "dmul")])
  13552. +
  13553. +(define_insn ""
  13554. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13555. +    (neg:SF (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13556. +                  (match_operand:SF 2 "gpc_reg_operand" "f"))
  13557. +             (match_operand:SF 3 "gpc_reg_operand" "f"))))]
  13558. +  "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13559. +  "fnmadds %0,%1,%2,%3"
  13560. +  [(set_attr "type" "fp")])
  13561. +
  13562. +(define_insn ""
  13563. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13564. +    (neg:SF (plus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13565. +                  (match_operand:SF 2 "gpc_reg_operand" "f"))
  13566. +             (match_operand:SF 3 "gpc_reg_operand" "f"))))]
  13567. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13568. +  "{fnma|fnmadd} %0,%1,%2,%3"
  13569. +  [(set_attr "type" "dmul")])
  13570. +
  13571. +(define_insn ""
  13572. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13573. +    (neg:SF (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13574. +                   (match_operand:SF 2 "gpc_reg_operand" "f"))
  13575. +              (match_operand:SF 3 "gpc_reg_operand" "f"))))]
  13576. +  "TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13577. +  "fnmsubs %0,%1,%2,%3"
  13578. +  [(set_attr "type" "fp")])
  13579. +
  13580. +(define_insn ""
  13581. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13582. +    (neg:SF (minus:SF (mult:SF (match_operand:SF 1 "gpc_reg_operand" "%f")
  13583. +                   (match_operand:SF 2 "gpc_reg_operand" "f"))
  13584. +              (match_operand:SF 3 "gpc_reg_operand" "f"))))]
  13585. +  "! TARGET_POWERPC && TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13586. +  "{fnms|fnmsub} %0,%1,%2,%3"
  13587. +  [(set_attr "type" "dmul")])
  13588. +
  13589. +(define_expand "sqrtsf2"
  13590. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13591. +    (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "")))]
  13592. +  "(TARGET_PPC_GPOPT || TARGET_POWER2) && TARGET_HARD_FLOAT"
  13593. +  "")
  13594. +
  13595. +(define_insn ""
  13596. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13597. +    (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
  13598. +  "TARGET_PPC_GPOPT && TARGET_HARD_FLOAT"
  13599. +  "fsqrts %0,%1"
  13600. +  [(set_attr "type" "ssqrt")])
  13601. +
  13602. +(define_insn ""
  13603. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13604. +    (sqrt:SF (match_operand:SF 1 "gpc_reg_operand" "f")))]
  13605. +  "TARGET_POWER2 && TARGET_HARD_FLOAT"
  13606. +  "fsqrt %0,%1"
  13607. +  [(set_attr "type" "dsqrt")])
  13608. +
  13609. +;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a
  13610. +;; fsel instruction and some auxiliary computations.  Then we just have a
  13611. +;; single DEFINE_INSN for fsel and the define_splits to make them if made by
  13612. +;; combine.
  13613. +(define_expand "maxsf3"
  13614. +  [(set (match_dup 3)
  13615. +    (minus:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13616. +          (match_operand:SF 2 "gpc_reg_operand" "")))
  13617. +   (set (match_operand:SF 0 "gpc_reg_operand" "")
  13618. +    (if_then_else:SF (ge (match_dup 3)
  13619. +                 (const_int 0))
  13620. +             (match_dup 1)
  13621. +             (match_dup 2)))]
  13622. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13623. +  "
  13624. +{ operands[3] = gen_reg_rtx (SFmode); }")
  13625. +
  13626. +(define_split
  13627. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13628. +    (smax:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13629. +         (match_operand:SF 2 "gpc_reg_operand" "")))
  13630. +   (clobber (match_operand:SF 3 "gpc_reg_operand" ""))]
  13631. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13632. +  [(set (match_dup 3)
  13633. +    (minus:SF (match_dup 1) (match_dup 2)))
  13634. +   (set (match_dup 0)
  13635. +    (if_then_else:SF (ge (match_dup 3)
  13636. +                 (const_int 0))
  13637. +             (match_dup 1)
  13638. +             (match_dup 2)))]
  13639. +  "")
  13640. +
  13641. +(define_expand "minsf3"
  13642. +  [(set (match_dup 3)
  13643. +    (minus:SF (match_operand:SF 2 "gpc_reg_operand" "")
  13644. +          (match_operand:SF 1 "gpc_reg_operand" "")))
  13645. +   (set (match_operand:SF 0 "gpc_reg_operand" "")
  13646. +    (if_then_else:SF (ge (match_dup 3)
  13647. +                 (const_int 0))
  13648. +             (match_dup 1)
  13649. +             (match_dup 2)))]
  13650. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13651. +  "
  13652. +{ operands[3] = gen_reg_rtx (SFmode); }")
  13653. +
  13654. +(define_split
  13655. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13656. +    (smin:SF (match_operand:SF 1 "gpc_reg_operand" "")
  13657. +         (match_operand:SF 2 "gpc_reg_operand" "")))
  13658. +   (clobber (match_operand:SF 3 "gpc_reg_operand" ""))]
  13659. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13660. +  [(set (match_dup 3)
  13661. +    (minus:SF (match_dup 2) (match_dup 1)))
  13662. +   (set (match_dup 0)
  13663. +    (if_then_else:SF (ge (match_dup 3)
  13664. +                 (const_int 0))
  13665. +             (match_dup 1)
  13666. +             (match_dup 2)))]
  13667. +  "")
  13668. +
  13669. +(define_expand "movsfcc"
  13670. +   [(set (match_operand:SF 0 "gpc_reg_operand" "")
  13671. +     (if_then_else:SF (match_operand 1 "comparison_operator" "")
  13672. +              (match_operand:SF 2 "gpc_reg_operand" "")
  13673. +              (match_operand:SF 3 "gpc_reg_operand" "")))]
  13674. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13675. +  "
  13676. +{
  13677. +  rtx temp, op0, op1;
  13678. +  enum rtx_code code = GET_CODE (operands[1]);
  13679. +  if (! rs6000_compare_fp_p)
  13680. +    FAIL;
  13681. +  switch (code)
  13682. +    {
  13683. +    case GE: case EQ: case NE:
  13684. +      op0 = rs6000_compare_op0;
  13685. +      op1 = rs6000_compare_op1;
  13686. +      break;
  13687. +    case GT:
  13688. +      op0 = rs6000_compare_op1;
  13689. +      op1 = rs6000_compare_op0;
  13690. +      temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
  13691. +      break;
  13692. +    case LE:
  13693. +      op0 = rs6000_compare_op1;
  13694. +      op1 = rs6000_compare_op0;
  13695. +      break;
  13696. +    case LT:
  13697. +      op0 = rs6000_compare_op0;
  13698. +      op1 = rs6000_compare_op1;
  13699. +      temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
  13700. +      break;
  13701. +    default:
  13702. +      FAIL;
  13703. +    }
  13704. +  if (GET_MODE (rs6000_compare_op0) == DFmode)
  13705. +    {
  13706. +      temp = gen_reg_rtx (DFmode);
  13707. +      emit_insn (gen_subdf3 (temp, op0, op1));
  13708. +      emit_insn (gen_fseldfsf4 (operands[0], temp, operands[2], operands[3]));
  13709. +      if (code == EQ)
  13710. +    {
  13711. +      emit_insn (gen_negdf2 (temp, temp));
  13712. +      emit_insn (gen_fseldfsf4 (operands[0], temp, operands[0], operands[3]));
  13713. +    }
  13714. +      else if (code == NE)
  13715. +    {
  13716. +      emit_insn (gen_negdf2 (temp, temp));
  13717. +      emit_insn (gen_fseldfsf4 (operands[0], temp, operands[3], operands[0]));
  13718. +    }
  13719. +    }
  13720. +  else
  13721. +    {
  13722. +      temp = gen_reg_rtx (SFmode);
  13723. +      emit_insn (gen_subsf3 (temp, op0, op1));
  13724. +      emit_insn (gen_fselsfsf4 (operands[0], temp, operands[2], operands[3]));
  13725. +      if (code == EQ)
  13726. +    {
  13727. +      emit_insn (gen_negsf2 (temp, temp));
  13728. +      emit_insn (gen_fselsfsf4 (operands[0], temp, operands[0], operands[3]));
  13729. +    }
  13730. +      else if (code == NE)
  13731. +    {
  13732. +      emit_insn (gen_negsf2 (temp, temp));
  13733. +      emit_insn (gen_fselsfsf4 (operands[0], temp, operands[3], operands[0]));
  13734. +    }
  13735. +    }
  13736. +  DONE;
  13737. +}")
  13738. +
  13739. +(define_insn "fselsfsf4"
  13740. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13741. +    (if_then_else:SF (ge (match_operand:SF 1 "gpc_reg_operand" "f")
  13742. +                 (const_int 0))
  13743. +             (match_operand:SF 2 "gpc_reg_operand" "f")
  13744. +             (match_operand:SF 3 "gpc_reg_operand" "f")))]
  13745. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13746. +  "fsel %0,%1,%2,%3"
  13747. +  [(set_attr "type" "fp")])
  13748. +
  13749. +(define_insn "fseldfsf4"
  13750. +  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")
  13751. +    (if_then_else:SF (ge (match_operand:DF 1 "gpc_reg_operand" "f")
  13752. +                 (const_int 0))
  13753. +             (match_operand:SF 2 "gpc_reg_operand" "f")
  13754. +             (match_operand:SF 3 "gpc_reg_operand" "f")))]
  13755. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13756. +  "fsel %0,%1,%2,%3"
  13757. +  [(set_attr "type" "fp")])
  13758. +
  13759. +(define_insn "negdf2"
  13760. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13761. +    (neg:DF (match_operand:DF 1 "gpc_reg_operand" "f")))]
  13762. +  "TARGET_HARD_FLOAT"
  13763. +  "fneg %0,%1"
  13764. +  [(set_attr "type" "fp")])
  13765. +
  13766. +(define_insn "absdf2"
  13767. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13768. +    (abs:DF (match_operand:DF 1 "gpc_reg_operand" "f")))]
  13769. +  "TARGET_HARD_FLOAT"
  13770. +  "fabs %0,%1"
  13771. +  [(set_attr "type" "fp")])
  13772. +
  13773. +(define_insn ""
  13774. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13775. +    (neg:DF (abs:DF (match_operand:DF 1 "gpc_reg_operand" "f"))))]
  13776. +  "TARGET_HARD_FLOAT"
  13777. +  "fnabs %0,%1"
  13778. +  [(set_attr "type" "fp")])
  13779. +
  13780. +(define_insn "adddf3"
  13781. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13782. +    (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
  13783. +         (match_operand:DF 2 "gpc_reg_operand" "f")))]
  13784. +  "TARGET_HARD_FLOAT"
  13785. +  "{fa|fadd} %0,%1,%2"
  13786. +  [(set_attr "type" "fp")])
  13787. +
  13788. +(define_insn "subdf3"
  13789. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13790. +    (minus:DF (match_operand:DF 1 "gpc_reg_operand" "f")
  13791. +          (match_operand:DF 2 "gpc_reg_operand" "f")))]
  13792. +  "TARGET_HARD_FLOAT"
  13793. +  "{fs|fsub} %0,%1,%2"
  13794. +  [(set_attr "type" "fp")])
  13795. +
  13796. +(define_insn "muldf3"
  13797. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13798. +    (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
  13799. +         (match_operand:DF 2 "gpc_reg_operand" "f")))]
  13800. +  "TARGET_HARD_FLOAT"
  13801. +  "{fm|fmul} %0,%1,%2"
  13802. +  [(set_attr "type" "dmul")])
  13803. +
  13804. +(define_insn "divdf3"
  13805. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13806. +    (div:DF (match_operand:DF 1 "gpc_reg_operand" "f")
  13807. +        (match_operand:DF 2 "gpc_reg_operand" "f")))]
  13808. +  "TARGET_HARD_FLOAT"
  13809. +  "{fd|fdiv} %0,%1,%2"
  13810. +  [(set_attr "type" "ddiv")])
  13811. +
  13812. +(define_insn ""
  13813. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13814. +    (plus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
  13815. +              (match_operand:DF 2 "gpc_reg_operand" "f"))
  13816. +         (match_operand:DF 3 "gpc_reg_operand" "f")))]
  13817. +  "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13818. +  "{fma|fmadd} %0,%1,%2,%3"
  13819. +  [(set_attr "type" "dmul")])
  13820. +
  13821. +(define_insn ""
  13822. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13823. +    (minus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
  13824. +               (match_operand:DF 2 "gpc_reg_operand" "f"))
  13825. +          (match_operand:DF 3 "gpc_reg_operand" "f")))]
  13826. +  "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13827. +  "{fms|fmsub} %0,%1,%2,%3"
  13828. +  [(set_attr "type" "dmul")])
  13829. +
  13830. +(define_insn ""
  13831. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13832. +    (neg:DF (plus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
  13833. +                  (match_operand:DF 2 "gpc_reg_operand" "f"))
  13834. +             (match_operand:DF 3 "gpc_reg_operand" "f"))))]
  13835. +  "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13836. +  "{fnma|fnmadd} %0,%1,%2,%3"
  13837. +  [(set_attr "type" "dmul")])
  13838. +
  13839. +(define_insn ""
  13840. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13841. +    (neg:DF (minus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
  13842. +                   (match_operand:DF 2 "gpc_reg_operand" "f"))
  13843. +              (match_operand:DF 3 "gpc_reg_operand" "f"))))]
  13844. +  "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
  13845. +  "{fnms|fnmsub} %0,%1,%2,%3"
  13846. +  [(set_attr "type" "dmul")])
  13847. +
  13848. +(define_insn "sqrtdf2"
  13849. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13850. +    (sqrt:DF (match_operand:DF 1 "gpc_reg_operand" "f")))]
  13851. +  "(TARGET_PPC_GPOPT || TARGET_POWER2) && TARGET_HARD_FLOAT"
  13852. +  "fsqrt %0,%1"
  13853. +  [(set_attr "type" "dsqrt")])
  13854. +
  13855. +;; For MIN, MAX, and conditional move, we use DEFINE_EXPAND's that involve a
  13856. +;; fsel instruction and some auxiliary computations.  Then we just have a
  13857. +;; single DEFINE_INSN for fsel and the define_splits to make them if made by
  13858. +;; combine.
  13859. +
  13860. +(define_expand "maxdf3"
  13861. +  [(set (match_dup 3)
  13862. +    (minus:DF (match_operand:DF 1 "gpc_reg_operand" "")
  13863. +          (match_operand:DF 2 "gpc_reg_operand" "")))
  13864. +   (set (match_operand:DF 0 "gpc_reg_operand" "")
  13865. +    (if_then_else:DF (ge (match_dup 3)
  13866. +                 (const_int 0))
  13867. +             (match_dup 1)
  13868. +             (match_dup 2)))]
  13869. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13870. +  "
  13871. +{ operands[3] = gen_reg_rtx (DFmode); }")
  13872. +
  13873. +(define_split
  13874. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  13875. +    (smax:DF (match_operand:DF 1 "gpc_reg_operand" "")
  13876. +         (match_operand:DF 2 "gpc_reg_operand" "")))
  13877. +   (clobber (match_operand:DF 3 "gpc_reg_operand" ""))]
  13878. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13879. +  [(set (match_dup 3)
  13880. +    (minus:DF (match_dup 1) (match_dup 2)))
  13881. +   (set (match_dup 0)
  13882. +    (if_then_else:DF (ge (match_dup 3)
  13883. +                 (const_int 0))
  13884. +             (match_dup 1)
  13885. +             (match_dup 2)))]
  13886. +  "")
  13887. +
  13888. +(define_expand "mindf3"
  13889. +  [(set (match_dup 3)
  13890. +    (minus:DF (match_operand:DF 2 "gpc_reg_operand" "")
  13891. +          (match_operand:DF 1 "gpc_reg_operand" "")))
  13892. +   (set (match_operand:DF 0 "gpc_reg_operand" "")
  13893. +    (if_then_else:DF (ge (match_dup 3)
  13894. +                 (const_int 0))
  13895. +             (match_dup 1)
  13896. +             (match_dup 2)))]
  13897. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13898. +  "
  13899. +{ operands[3] = gen_reg_rtx (DFmode); }")
  13900. +
  13901. +(define_split
  13902. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  13903. +    (smin:DF (match_operand:DF 1 "gpc_reg_operand" "")
  13904. +         (match_operand:DF 2 "gpc_reg_operand" "")))
  13905. +   (clobber (match_operand:DF 3 "gpc_reg_operand" ""))]
  13906. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13907. +  [(set (match_dup 3)
  13908. +    (minus:DF (match_dup 2) (match_dup 1)))
  13909. +   (set (match_dup 0)
  13910. +    (if_then_else:DF (ge (match_dup 3)
  13911. +                 (const_int 0))
  13912. +             (match_dup 1)
  13913. +             (match_dup 2)))]
  13914. +  "")
  13915. +
  13916. +(define_expand "movdfcc"
  13917. +   [(set (match_operand:DF 0 "gpc_reg_operand" "")
  13918. +     (if_then_else:DF (match_operand 1 "comparison_operator" "")
  13919. +              (match_operand:DF 2 "gpc_reg_operand" "")
  13920. +              (match_operand:DF 3 "gpc_reg_operand" "")))]
  13921. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13922. +  "
  13923. +{
  13924. +  rtx temp, op0, op1;
  13925. +  enum rtx_code code = GET_CODE (operands[1]);
  13926. +  if (! rs6000_compare_fp_p)
  13927. +    FAIL;
  13928. +  switch (code)
  13929. +    {
  13930. +    case GE: case EQ: case NE:
  13931. +      op0 = rs6000_compare_op0;
  13932. +      op1 = rs6000_compare_op1;
  13933. +      break;
  13934. +    case GT:
  13935. +      op0 = rs6000_compare_op1;
  13936. +      op1 = rs6000_compare_op0;
  13937. +      temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
  13938. +      break;
  13939. +    case LE:
  13940. +      op0 = rs6000_compare_op1;
  13941. +      op1 = rs6000_compare_op0;
  13942. +      break;
  13943. +    case LT:
  13944. +      op0 = rs6000_compare_op0;
  13945. +      op1 = rs6000_compare_op1;
  13946. +      temp = operands[2]; operands[2] = operands[3]; operands[3] = temp;
  13947. +      break;
  13948. +    default:
  13949. +      FAIL;
  13950. +    }
  13951. +  if (GET_MODE (rs6000_compare_op0) == DFmode)
  13952. +    {
  13953. +      temp = gen_reg_rtx (DFmode);
  13954. +      emit_insn (gen_subdf3 (temp, op0, op1));
  13955. +      emit_insn (gen_fseldfdf4 (operands[0], temp, operands[2], operands[3]));
  13956. +      if (code == EQ)
  13957. +    {
  13958. +      emit_insn (gen_negdf2 (temp, temp));
  13959. +      emit_insn (gen_fseldfdf4 (operands[0], temp, operands[0], operands[3]));
  13960. +    }
  13961. +      else if (code == NE)
  13962. +    {
  13963. +      emit_insn (gen_negdf2 (temp, temp));
  13964. +      emit_insn (gen_fseldfdf4 (operands[0], temp, operands[3], operands[0]));
  13965. +    }
  13966. +    }
  13967. +  else
  13968. +    {
  13969. +      temp = gen_reg_rtx (SFmode);
  13970. +      emit_insn (gen_subsf3 (temp, op0, op1));
  13971. +      emit_insn (gen_fselsfdf4 (operands[0], temp, operands[2], operands[3]));
  13972. +      if (code == EQ)
  13973. +    {
  13974. +      emit_insn (gen_negsf2 (temp, temp));
  13975. +      emit_insn (gen_fselsfdf4 (operands[0], temp, operands[0], operands[3]));
  13976. +    }
  13977. +      else if (code == NE)
  13978. +    {
  13979. +      emit_insn (gen_negsf2 (temp, temp));
  13980. +      emit_insn (gen_fselsfdf4 (operands[0], temp, operands[3], operands[0]));
  13981. +    }
  13982. +    }
  13983. +  DONE;
  13984. +}")
  13985. +
  13986. +(define_insn "fseldfdf4"
  13987. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13988. +    (if_then_else:DF (ge (match_operand:DF 1 "gpc_reg_operand" "f")
  13989. +                 (const_int 0))
  13990. +             (match_operand:DF 2 "gpc_reg_operand" "f")
  13991. +             (match_operand:DF 3 "gpc_reg_operand" "f")))]
  13992. +  "TARGET_PPC_GFXOPT && TARGET_HARD_FLOAT"
  13993. +  "fsel %0,%1,%2,%3"
  13994. +  [(set_attr "type" "fp")])
  13995. +
  13996. +(define_insn "fselsfdf4"
  13997. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  13998. +    (if_then_else:DF (ge (match_operand:SF 1 "gpc_reg_operand" "f")
  13999. +                 (const_int 0))
  14000. +             (match_operand:DF 2 "gpc_reg_operand" "f")
  14001. +             (match_operand:DF 3 "gpc_reg_operand" "f")))]
  14002. +  "TARGET_PPC_GFXOPT"
  14003. +  "fsel %0,%1,%2,%3"
  14004. +  [(set_attr "type" "fp")])
  14005. +
  14006. +;; Conversions to and from floating-point.
  14007. +
  14008. +(define_expand "floatsidf2"
  14009. +  [(parallel [(set (match_operand:DF 0 "gpc_reg_operand" "")
  14010. +           (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
  14011. +          (use (match_dup 2))
  14012. +          (use (match_dup 3))
  14013. +          (clobber (match_dup 4))
  14014. +          (clobber (match_dup 5))
  14015. +          (clobber (reg:DF 76))])]
  14016. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14017. +  "
  14018. +{
  14019. +  operands[2] = force_reg (SImode, GEN_INT (0x43300000));
  14020. +  operands[3] = force_reg (DFmode, rs6000_float_const (\"4503601774854144\", DFmode));
  14021. +  operands[4] = gen_reg_rtx (SImode);
  14022. +  operands[5] = gen_reg_rtx (Pmode);
  14023. +}")
  14024. +
  14025. +(define_insn "*floatsidf2_internal"
  14026. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=&f")
  14027. +    (float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))
  14028. +   (use (match_operand:SI 2 "gpc_reg_operand" "r"))
  14029. +   (use (match_operand:DF 3 "gpc_reg_operand" "f"))
  14030. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  14031. +   (clobber (match_operand 5 "gpc_reg_operand" "=b"))
  14032. +   (clobber (reg:DF 76))]
  14033. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14034. +  "#"
  14035. +  [(set_attr "length" "24")])
  14036. +
  14037. +(define_split
  14038. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  14039. +    (float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
  14040. +   (use (match_operand:SI 2 "gpc_reg_operand" ""))
  14041. +   (use (match_operand:DF 3 "gpc_reg_operand" ""))
  14042. +   (clobber (match_operand:SI 4 "gpc_reg_operand" ""))
  14043. +   (clobber (match_operand 5 "gpc_reg_operand" ""))
  14044. +   (clobber (reg:DF 76))]
  14045. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14046. +  [(set (match_dup 4)
  14047. +    (xor:SI (match_dup 1)
  14048. +        (match_dup 6)))
  14049. +   (set (match_dup 5)
  14050. +    (unspec [(const_int 0)] 11))
  14051. +   (set (match_dup 7)
  14052. +    (unspec [(match_dup 4)
  14053. +         (match_dup 5)] 12))    ;; low word
  14054. +   (set (match_dup 7)
  14055. +    (unspec [(match_dup 2)
  14056. +         (match_dup 5)
  14057. +         (match_dup 7)] 13))    ;; high word
  14058. +   (set (match_dup 0)
  14059. +    (unspec [(match_dup 7)
  14060. +         (match_dup 5)] 14))
  14061. +   (set (match_dup 0)
  14062. +    (minus:DF (match_dup 0)
  14063. +          (match_dup 3)))]
  14064. +  "
  14065. +{
  14066. +  operands[6] = GEN_INT (0x80000000);
  14067. +  operands[7] = gen_rtx_REG (DFmode, FPMEM_REGNUM);
  14068. +}")
  14069. +
  14070. +(define_expand "floatunssidf2"
  14071. +  [(parallel [(set (match_operand:DF 0 "gpc_reg_operand" "")
  14072. +           (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
  14073. +          (use (match_dup 2))
  14074. +          (use (match_dup 3))
  14075. +          (clobber (match_dup 4))
  14076. +          (clobber (reg:DF 76))])]
  14077. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14078. +  "
  14079. +{
  14080. +  operands[2] = force_reg (SImode, GEN_INT (0x43300000));
  14081. +  operands[3] = force_reg (DFmode, rs6000_float_const (\"4503599627370496\", DFmode));
  14082. +  operands[4] = gen_reg_rtx (Pmode);
  14083. +}")
  14084. +
  14085. +(define_insn "*floatunssidf2_internal"
  14086. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=&f")
  14087. +    (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "r")))
  14088. +   (use (match_operand:SI 2 "gpc_reg_operand" "r"))
  14089. +   (use (match_operand:DF 3 "gpc_reg_operand" "f"))
  14090. +   (clobber (match_operand 4 "gpc_reg_operand" "=b"))
  14091. +   (clobber (reg:DF 76))]
  14092. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14093. +  "#"
  14094. +  [(set_attr "length" "20")])
  14095. +
  14096. +(define_split
  14097. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  14098. +    (unsigned_float:DF (match_operand:SI 1 "gpc_reg_operand" "")))
  14099. +   (use (match_operand:SI 2 "gpc_reg_operand" ""))
  14100. +   (use (match_operand:DF 3 "gpc_reg_operand" ""))
  14101. +   (clobber (match_operand 4 "gpc_reg_operand" ""))
  14102. +   (clobber (reg:DF 76))]
  14103. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14104. +  [(set (match_dup 4)
  14105. +    (unspec [(const_int 0)] 11))
  14106. +   (set (match_dup 5)
  14107. +    (unspec [(match_dup 1)
  14108. +         (match_dup 4)] 12))    ;; low word
  14109. +   (set (match_dup 5)
  14110. +    (unspec [(match_dup 2)
  14111. +         (match_dup 4)
  14112. +         (match_dup 5)] 13))    ;; high word
  14113. +   (set (match_dup 0)
  14114. +    (unspec [(match_dup 5)
  14115. +         (match_dup 4)] 14))
  14116. +   (set (match_dup 0)
  14117. +    (minus:DF (match_dup 0)
  14118. +          (match_dup 3)))]
  14119. +  "operands[5] = gen_rtx_REG (DFmode, FPMEM_REGNUM);")
  14120. +
  14121. +;; Load up scratch register with base address + offset if needed
  14122. +(define_insn "*floatsidf2_loadaddr"
  14123. +  [(set (match_operand 0 "gpc_reg_operand" "=b")
  14124. +    (unspec [(const_int 0)] 11))]
  14125. +  "TARGET_HARD_FLOAT"
  14126. +  "*
  14127. +{
  14128. +  if (rs6000_fpmem_offset > 32760)
  14129. +    {
  14130. +      rtx xop[3];
  14131. +
  14132. +      xop[0] = operands[0];
  14133. +      xop[1] = (frame_pointer_needed) ? frame_pointer_rtx : stack_pointer_rtx;
  14134. +      xop[2] = GEN_INT ((rs6000_fpmem_offset >> 16) + ((rs6000_fpmem_offset & 0x8000) >> 15));
  14135. +      output_asm_insn (\"{cau|addis} %0,%1,%2\", xop);
  14136. +    }
  14137. +
  14138. +  return \"\";
  14139. +}"
  14140. +  [(set_attr "length" "4")])
  14141. +
  14142. +(define_insn "*floatsidf2_store1"
  14143. +  [(set (reg:DF 76)
  14144. +    (unspec [(match_operand:SI 0 "gpc_reg_operand" "r")
  14145. +         (match_operand 1 "gpc_reg_operand" "b")] 12))]
  14146. +  "TARGET_HARD_FLOAT"
  14147. +  "*
  14148. +{
  14149. +  rtx indx;
  14150. +
  14151. +  if (rs6000_fpmem_offset > 32760)
  14152. +    indx = operands[1];
  14153. +  else if (frame_pointer_needed)
  14154. +    indx = frame_pointer_rtx;
  14155. +  else
  14156. +    indx = stack_pointer_rtx;
  14157. +
  14158. +  operands[2] = gen_rtx_MEM (SImode,
  14159. +             gen_rtx_PLUS (Pmode,
  14160. +                  indx,
  14161. +                  GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
  14162. +                       + ((WORDS_BIG_ENDIAN != 0) * 4))));
  14163. +
  14164. +  return \"{st|stw} %0,%2\";
  14165. +}"
  14166. +  [(set_attr "type" "store")])
  14167. +
  14168. +(define_insn "*floatsidf2_store2"
  14169. +  [(set (reg:DF 76)
  14170. +    (unspec [(match_operand:SI 0 "gpc_reg_operand" "r")
  14171. +         (match_operand 1 "gpc_reg_operand" "b")
  14172. +         (reg:DF 76)] 13))]
  14173. +  "TARGET_HARD_FLOAT"
  14174. +  "*
  14175. +{
  14176. +  rtx indx;
  14177. +
  14178. +  if (rs6000_fpmem_offset > 32760)
  14179. +    indx = operands[1];
  14180. +  else if (frame_pointer_needed)
  14181. +    indx = frame_pointer_rtx;
  14182. +  else
  14183. +    indx = stack_pointer_rtx;
  14184. +
  14185. +  operands[2] = gen_rtx_MEM (SImode,
  14186. +             gen_rtx_PLUS (Pmode,
  14187. +                  indx,
  14188. +                  GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
  14189. +                       + ((WORDS_BIG_ENDIAN == 0) * 4))));
  14190. +
  14191. +  return \"{st|stw} %0,%2\";
  14192. +}"
  14193. +  [(set_attr "type" "store")])
  14194. +
  14195. +(define_insn "*floatsidf2_load"
  14196. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  14197. +    (unspec [(reg:DF 76)
  14198. +         (match_operand 1 "gpc_reg_operand" "b")] 14))]
  14199. +  "TARGET_HARD_FLOAT"
  14200. +  "*
  14201. +{
  14202. +  rtx indx;
  14203. +  HOST_WIDE_INT offset = rs6000_fpmem_offset;
  14204. +
  14205. +  if (rs6000_fpmem_offset > 32760)
  14206. +    {
  14207. +      indx = operands[1];
  14208. +      offset = (((offset & 0xffff) ^ 0x8000) - 0x8000);
  14209. +    }
  14210. +  else if (frame_pointer_needed)
  14211. +    indx = frame_pointer_rtx;
  14212. +  else
  14213. +    indx = stack_pointer_rtx;
  14214. +
  14215. +  operands[2] = gen_rtx_MEM (SImode,
  14216. +             gen_rtx_PLUS (Pmode, indx, GEN_INT (offset)));
  14217. +
  14218. +  return \"lfd %0,%2\";
  14219. +}"
  14220. +  [(set_attr "type" "fpload")])
  14221. +
  14222. +(define_expand "fix_truncdfsi2"
  14223. +  [(parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")
  14224. +           (fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))
  14225. +          (clobber (match_dup 2))
  14226. +          (clobber (match_dup 3))
  14227. +          (clobber (match_dup 4))])]
  14228. +  "TARGET_HARD_FLOAT"
  14229. +  "
  14230. +{
  14231. +  if (! TARGET_POWER2 && ! TARGET_POWERPC)
  14232. +    {
  14233. +      emit_insn (gen_trunc_call (operands[0], operands[1],
  14234. +                 gen_rtx_SYMBOL_REF (Pmode, RS6000_ITRUNC)));
  14235. +      DONE;
  14236. +    }
  14237. +
  14238. +  operands[2] = gen_reg_rtx (DImode);
  14239. +  operands[3] = gen_reg_rtx (Pmode);
  14240. +  operands[4] = gen_rtx_REG (DImode, FPMEM_REGNUM);
  14241. +}")
  14242. +
  14243. +(define_insn "*fix_truncdfsi2_internal"
  14244. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  14245. +    (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f")))
  14246. +   (clobber (match_operand:DI 2 "gpc_reg_operand" "=f"))
  14247. +   (clobber (match_operand 3 "gpc_reg_operand" "=b"))
  14248. +   (clobber (reg:DI 76))]
  14249. +  "TARGET_HARD_FLOAT"
  14250. +  "#"
  14251. +  [(set_attr "length" "12")])
  14252. +
  14253. +(define_split
  14254. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  14255. +    (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f")))
  14256. +   (clobber (match_operand:DI 2 "gpc_reg_operand" ""))
  14257. +   (clobber (match_operand 3 "gpc_reg_operand" ""))
  14258. +   (clobber (reg:DI 76))]
  14259. +  "TARGET_HARD_FLOAT"
  14260. +  [(clobber (match_dup 2))
  14261. +   (set (subreg:SI (match_dup 2) 0)
  14262. +    (fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))
  14263. +   (set (match_dup 3)
  14264. +    (unspec [(const_int 0)] 11))
  14265. +   (set (match_dup 4)
  14266. +    (unspec [(match_dup 2)
  14267. +         (match_dup 3)] 15))
  14268. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  14269. +    (unspec [(match_dup 4)
  14270. +         (match_dup 3)] 16))]
  14271. +  "operands[4] = gen_rtx_REG (DImode, FPMEM_REGNUM);")
  14272. +
  14273. +(define_insn "*fix_truncdfsi2_store"
  14274. +  [(set (reg:DI 76)
  14275. +    (unspec [(match_operand:DI 0 "gpc_reg_operand" "f")
  14276. +         (match_operand 1 "gpc_reg_operand" "b")] 15))]
  14277. +  "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT"
  14278. +  "*
  14279. +{
  14280. +  rtx indx;
  14281. +
  14282. +  if (rs6000_fpmem_offset > 32760)
  14283. +    indx = operands[1];
  14284. +  else if (frame_pointer_needed)
  14285. +    indx = frame_pointer_rtx;
  14286. +  else
  14287. +    indx = stack_pointer_rtx;
  14288. +
  14289. +  operands[2] = gen_rtx_MEM (DFmode,
  14290. +             gen_rtx_PLUS (Pmode,
  14291. +                  indx,
  14292. +                  GEN_INT ((((rs6000_fpmem_offset & 0xffff)
  14293. +                         ^ 0x8000) - 0x8000))));
  14294. +
  14295. +  return \"stfd %0,%2\";
  14296. +}"
  14297. +  [(set_attr "type" "fpstore")])
  14298. +
  14299. +(define_insn "*fix_truncdfsi2_load"
  14300. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  14301. +    (unspec [(reg:DI 76)
  14302. +         (match_operand 1 "gpc_reg_operand" "b")] 16))]
  14303. +  "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT"
  14304. +  "*
  14305. +{
  14306. +  rtx indx;
  14307. +
  14308. +  if (rs6000_fpmem_offset > 32760)
  14309. +    indx = operands[1];
  14310. +  else if (frame_pointer_needed)
  14311. +    indx = frame_pointer_rtx;
  14312. +  else
  14313. +    indx = stack_pointer_rtx;
  14314. +
  14315. +  operands[2] = gen_rtx_MEM (DFmode,
  14316. +             gen_rtx_PLUS (Pmode,
  14317. +                  indx,
  14318. +                  GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
  14319. +                       + ((WORDS_BIG_ENDIAN) ? 4 : 0))));
  14320. +
  14321. +  return \"{l|lwz} %0,%2\";
  14322. +}"
  14323. +  [(set_attr "type" "load")])
  14324. +
  14325. +(define_expand "fixuns_truncdfsi2"
  14326. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  14327. +    (unsigned_fix:SI (match_operand:DF 1 "gpc_reg_operand" "")))]
  14328. +  "! TARGET_POWER2 && ! TARGET_POWERPC && TARGET_HARD_FLOAT"
  14329. +  "
  14330. +{
  14331. +  emit_insn (gen_trunc_call (operands[0], operands[1],
  14332. +                 gen_rtx_SYMBOL_REF (Pmode, RS6000_UITRUNC)));
  14333. +  DONE;
  14334. +}")
  14335. +
  14336. +(define_expand "trunc_call"
  14337. +  [(parallel [(set (match_operand:SI 0 "" "")
  14338. +           (fix:SI (match_operand:DF 1 "" "")))
  14339. +          (use (match_operand:SI 2 "" ""))])]
  14340. +  "TARGET_HARD_FLOAT"
  14341. +  "
  14342. +{
  14343. +  rtx insns = gen_trunc_call_rtl (operands[0], operands[1], operands[2]);
  14344. +  rtx first = XVECEXP (insns, 0, 0);
  14345. +  rtx last = XVECEXP (insns, 0, XVECLEN (insns, 0) - 1);
  14346. +
  14347. +  REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last,
  14348. +                   REG_NOTES (first));
  14349. +  REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, REG_NOTES (last));
  14350. +
  14351. +  emit_insn (insns);
  14352. +  DONE;
  14353. +}")
  14354. +
  14355. +(define_expand "trunc_call_rtl"
  14356. +  [(set (reg:DF 33) (match_operand:DF 1 "gpc_reg_operand" ""))
  14357. +   (use (reg:DF 33))
  14358. +   (parallel [(set (reg:SI 3)
  14359. +           (call (mem:SI (match_operand 2 "" "")) (const_int 0)))
  14360. +          (use (const_int 0))
  14361. +          (clobber (scratch:SI))])
  14362. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  14363. +    (reg:SI 3))]
  14364. +  "TARGET_HARD_FLOAT"
  14365. +  "
  14366. +{
  14367. +  rs6000_trunc_used = 1;
  14368. +}")
  14369. +
  14370. +(define_insn "*fctiwz"
  14371. +  [(set (subreg:SI (match_operand:DI 0 "gpc_reg_operand" "=f") 0)
  14372. +    (fix:SI (match_operand:DF 1 "gpc_reg_operand" "f")))]
  14373. +  "(TARGET_POWER2 || TARGET_POWERPC) && TARGET_HARD_FLOAT"
  14374. +  "{fcirz|fctiwz} %0,%1"
  14375. +  [(set_attr "type" "fp")])
  14376. +
  14377. +(define_insn "floatdidf2"
  14378. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  14379. +    (float:DF (match_operand:DI 1 "gpc_reg_operand" "f")))]
  14380. +  "TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14381. +  "fcfid %0,%1"
  14382. +  [(set_attr "type" "fp")])
  14383. +
  14384. +(define_insn "fix_truncdfdi2"
  14385. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=f")
  14386. +    (fix:DI (match_operand:DF 1 "gpc_reg_operand" "f")))]
  14387. +  "TARGET_POWERPC64 && TARGET_HARD_FLOAT"
  14388. +  "fctidz %0,%1"
  14389. +  [(set_attr "type" "fp")])
  14390. +
  14391. +;; Define the DImode operations that can be done in a small number
  14392. +;; of instructions.  The & constraints are to prevent the register
  14393. +;; allocator from allocating registers that overlap with the inputs
  14394. +;; (for example, having an input in 7,8 and an output in 6,7).  We
  14395. +;; also allow for the output being the same as one of the inputs.
  14396. +
  14397. +(define_insn "*adddi3_noppc64"
  14398. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,r,r")
  14399. +    (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,0,0")
  14400. +         (match_operand:DI 2 "reg_or_short_operand" "r,I,r,I")))]
  14401. +  "! TARGET_POWERPC64"
  14402. +  "*
  14403. +{
  14404. +  if (WORDS_BIG_ENDIAN)
  14405. +    return (GET_CODE (operands[2])) != CONST_INT
  14406. +        ? \"{a|addc} %L0,%L1,%L2\;{ae|adde} %0,%1,%2\"
  14407. +        : \"{ai|addic} %L0,%L1,%2\;{a%G2e|add%G2e} %0,%1\";
  14408. +  else
  14409. +    return (GET_CODE (operands[2])) != CONST_INT
  14410. +        ? \"{a|addc} %0,%1,%2\;{ae|adde} %L0,%L1,%L2\"
  14411. +        : \"{ai|addic} %0,%1,%2\;{a%G2e|add%G2e} %L0,%L1\";
  14412. +}"
  14413. +  [(set_attr "length" "8")])
  14414. +
  14415. +(define_insn "*subdi3_noppc64"
  14416. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,&r,r,r,r")
  14417. +    (minus:DI (match_operand:DI 1 "reg_or_short_operand" "r,I,0,r,I")
  14418. +          (match_operand:DI 2 "gpc_reg_operand" "r,r,r,0,0")))]
  14419. +  "! TARGET_POWERPC64"
  14420. +  "*
  14421. +{
  14422. +  if (WORDS_BIG_ENDIAN)
  14423. +    return (GET_CODE (operands[1]) != CONST_INT)
  14424. +        ? \"{sf|subfc} %L0,%L2,%L1\;{sfe|subfe} %0,%2,%1\"
  14425. +        : \"{sfi|subfic} %L0,%L2,%1\;{sf%G1e|subf%G1e} %0,%2\";
  14426. +  else
  14427. +    return (GET_CODE (operands[1]) != CONST_INT)
  14428. +        ? \"{sf|subfc} %0,%2,%1\;{sfe|subfe} %L0,%L2,%L1\"
  14429. +        : \"{sfi|subfic} %0,%2,%1\;{sf%G1e|subf%G1e} %L0,%L2\";
  14430. +}"
  14431. +  [(set_attr "length" "8")])
  14432. +
  14433. +(define_insn "*negdi2_noppc64"
  14434. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
  14435. +    (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r,0")))]
  14436. +  "! TARGET_POWERPC64"
  14437. +  "*
  14438. +{
  14439. +  return (WORDS_BIG_ENDIAN)
  14440. +    ? \"{sfi|subfic} %L0,%L1,0\;{sfze|subfze} %0,%1\"
  14441. +    : \"{sfi|subfic} %0,%1,0\;{sfze|subfze} %L0,%L1\";
  14442. +}"
  14443. +  [(set_attr "length" "8")])
  14444. +
  14445. +(define_expand "mulsidi3"
  14446. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14447. +    (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
  14448. +         (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
  14449. +  "! TARGET_POWERPC64"
  14450. +  "
  14451. +{
  14452. +  if (! TARGET_POWER && ! TARGET_POWERPC)
  14453. +    {
  14454. +      emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
  14455. +      emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
  14456. +      emit_insn (gen_mull_call ());
  14457. +      if (WORDS_BIG_ENDIAN)
  14458. +        emit_move_insn (operands[0], gen_rtx_REG (DImode, 3));
  14459. +      else
  14460. +    {
  14461. +      emit_move_insn (operand_subword (operands[0], 0, 0, DImode),
  14462. +              gen_rtx_REG (SImode, 3));
  14463. +      emit_move_insn (operand_subword (operands[0], 1, 0, DImode),
  14464. +              gen_rtx_REG (SImode, 4));
  14465. +    }
  14466. +      DONE;
  14467. +    }
  14468. +  else if (TARGET_POWER)
  14469. +    {
  14470. +      emit_insn (gen_mulsidi3_mq (operands[0], operands[1], operands[2]));
  14471. +      DONE;
  14472. +    }
  14473. +}")
  14474. +
  14475. +(define_insn "mulsidi3_mq"
  14476. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14477. +    (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14478. +         (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
  14479. +   (clobber (match_scratch:SI 3 "=q"))]
  14480. +  "TARGET_POWER"
  14481. +  "mul %0,%1,%2\;mfmq %L0"
  14482. +  [(set_attr "type" "imul")
  14483. +   (set_attr "length" "8")])
  14484. +
  14485. +(define_insn "*mulsidi3_no_mq"
  14486. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
  14487. +    (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14488. +         (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
  14489. +  "TARGET_POWERPC && ! TARGET_POWER && ! TARGET_POWERPC64"
  14490. +  "*
  14491. +{
  14492. +  return (WORDS_BIG_ENDIAN)
  14493. +    ? \"mulhw %0,%1,%2\;mullw %L0,%1,%2\"
  14494. +    : \"mulhw %L0,%1,%2\;mullw %0,%1,%2\";
  14495. +}"
  14496. +  [(set_attr "type" "imul")
  14497. +   (set_attr "length" "8")])
  14498. +
  14499. +(define_split
  14500. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14501. +    (mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
  14502. +         (sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
  14503. +  "TARGET_POWERPC && ! TARGET_POWERPC64 && reload_completed"
  14504. +  [(set (match_dup 3)
  14505. +    (truncate:SI
  14506. +     (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  14507. +                   (sign_extend:DI (match_dup 2)))
  14508. +              (const_int 32))))
  14509. +   (set (match_dup 4)
  14510. +    (mult:SI (match_dup 1)
  14511. +         (match_dup 2)))]
  14512. +  "
  14513. +{
  14514. +  int endian = (WORDS_BIG_ENDIAN == 0);
  14515. +  operands[3] = operand_subword (operands[0], endian, 0, DImode);
  14516. +  operands[4] = operand_subword (operands[0], 1 - endian, 0, DImode);
  14517. +}")
  14518. +
  14519. +(define_expand "umulsidi3"
  14520. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14521. +    (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
  14522. +         (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
  14523. +  "TARGET_POWERPC && ! TARGET_POWERPC64"
  14524. +  "
  14525. +{
  14526. +  if (TARGET_POWER)
  14527. +    {
  14528. +      emit_insn (gen_umulsidi3_mq (operands[0], operands[1], operands[2]));
  14529. +      DONE;
  14530. +    }
  14531. +}")
  14532. +
  14533. +(define_insn "umulsidi3_mq"
  14534. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
  14535. +    (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14536. +         (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
  14537. +   (clobber (match_scratch:SI 3 "=q"))]
  14538. +  "TARGET_POWERPC && TARGET_POWER"
  14539. +  "*
  14540. +{
  14541. +  return (WORDS_BIG_ENDIAN)
  14542. +    ? \"mulhwu %0,%1,%2\;mullw %L0,%1,%2\"
  14543. +    : \"mulhwu %L0,%1,%2\;mullw %0,%1,%2\";
  14544. +}"
  14545. +  [(set_attr "type" "imul")
  14546. +   (set_attr "length" "8")])
  14547. +
  14548. +(define_insn "*umulsidi3_no_mq"
  14549. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
  14550. +    (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14551. +         (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
  14552. +  "TARGET_POWERPC && ! TARGET_POWER && ! TARGET_POWERPC64"
  14553. +  "*
  14554. +{
  14555. +  return (WORDS_BIG_ENDIAN)
  14556. +    ? \"mulhwu %0,%1,%2\;mullw %L0,%1,%2\"
  14557. +    : \"mulhwu %L0,%1,%2\;mullw %0,%1,%2\";
  14558. +}"
  14559. +  [(set_attr "type" "imul")
  14560. +   (set_attr "length" "8")])
  14561. +
  14562. +(define_split
  14563. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14564. +    (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
  14565. +         (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
  14566. +  "TARGET_POWERPC && ! TARGET_POWERPC64 && reload_completed"
  14567. +  [(set (match_dup 3)
  14568. +    (truncate:SI
  14569. +     (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  14570. +                   (zero_extend:DI (match_dup 2)))
  14571. +              (const_int 32))))
  14572. +   (set (match_dup 4)
  14573. +    (mult:SI (match_dup 1)
  14574. +         (match_dup 2)))]
  14575. +  "
  14576. +{
  14577. +  int endian = (WORDS_BIG_ENDIAN == 0);
  14578. +  operands[3] = operand_subword (operands[0], endian, 0, DImode);
  14579. +  operands[4] = operand_subword (operands[0], 1 - endian, 0, DImode);
  14580. +}")
  14581. +
  14582. +(define_expand "smulsi3_highpart"
  14583. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  14584. +    (truncate:SI
  14585. +     (lshiftrt:DI (mult:DI (sign_extend:DI
  14586. +                (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14587. +                   (sign_extend:DI
  14588. +                (match_operand:SI 2 "gpc_reg_operand" "r")))
  14589. +              (const_int 32))))]
  14590. +  ""
  14591. +  "
  14592. +{
  14593. +  if (! TARGET_POWER && ! TARGET_POWERPC)
  14594. +    {
  14595. +      emit_move_insn (gen_rtx_REG (SImode, 3), operands[1]);
  14596. +      emit_move_insn (gen_rtx_REG (SImode, 4), operands[2]);
  14597. +      emit_insn (gen_mulh_call ());
  14598. +      emit_move_insn (operands[0], gen_rtx_REG (SImode, 3));
  14599. +      DONE;
  14600. +    }
  14601. +  else if (TARGET_POWER)
  14602. +    {
  14603. +      emit_insn (gen_smulsi3_highpart_mq (operands[0], operands[1], operands[2]));
  14604. +      DONE;
  14605. +    }
  14606. +}")
  14607. +
  14608. +(define_insn "smulsi3_highpart_mq"
  14609. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  14610. +    (truncate:SI
  14611. +     (lshiftrt:DI (mult:DI (sign_extend:DI
  14612. +                (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14613. +                   (sign_extend:DI
  14614. +                (match_operand:SI 2 "gpc_reg_operand" "r")))
  14615. +              (const_int 32))))
  14616. +   (clobber (match_scratch:SI 3 "=q"))]
  14617. +  "TARGET_POWER"
  14618. +  "mul %0,%1,%2"
  14619. +  [(set_attr "type" "imul")])
  14620. +
  14621. +(define_insn "*smulsi3_highpart_no_mq"
  14622. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  14623. +    (truncate:SI
  14624. +     (lshiftrt:DI (mult:DI (sign_extend:DI
  14625. +                (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14626. +                   (sign_extend:DI
  14627. +                (match_operand:SI 2 "gpc_reg_operand" "r")))
  14628. +              (const_int 32))))]
  14629. +  "TARGET_POWERPC && ! TARGET_POWER"
  14630. +  "mulhw %0,%1,%2"
  14631. +  [(set_attr "type" "imul")])
  14632. +
  14633. +(define_expand "umulsi3_highpart"
  14634. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  14635. +    (truncate:SI
  14636. +     (lshiftrt:DI (mult:DI (zero_extend:DI
  14637. +                (match_operand:SI 1 "gpc_reg_operand" ""))
  14638. +                   (zero_extend:DI
  14639. +                (match_operand:SI 2 "gpc_reg_operand" "")))
  14640. +              (const_int 32))))]
  14641. +  "TARGET_POWERPC"
  14642. +  "
  14643. +{
  14644. +  if (TARGET_POWER)
  14645. +    {
  14646. +      emit_insn (gen_umulsi3_highpart_mq (operands[0], operands[1], operands[2]));
  14647. +      DONE;
  14648. +    }
  14649. +}")
  14650. +
  14651. +(define_insn "umulsi3_highpart_mq"
  14652. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  14653. +    (truncate:SI
  14654. +     (lshiftrt:DI (mult:DI (zero_extend:DI
  14655. +                (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14656. +                   (zero_extend:DI
  14657. +                (match_operand:SI 2 "gpc_reg_operand" "r")))
  14658. +              (const_int 32))))
  14659. +   (clobber (match_scratch:SI 3 "=q"))]
  14660. +  "TARGET_POWERPC && TARGET_POWER"
  14661. +  "mulhwu %0,%1,%2"
  14662. +  [(set_attr "type" "imul")])
  14663. +
  14664. +(define_insn "*umulsi3_highpart_no_mq"
  14665. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  14666. +    (truncate:SI
  14667. +     (lshiftrt:DI (mult:DI (zero_extend:DI
  14668. +                (match_operand:SI 1 "gpc_reg_operand" "%r"))
  14669. +                   (zero_extend:DI
  14670. +                (match_operand:SI 2 "gpc_reg_operand" "r")))
  14671. +              (const_int 32))))]
  14672. +  "TARGET_POWERPC && ! TARGET_POWER"
  14673. +  "mulhwu %0,%1,%2"
  14674. +  [(set_attr "type" "imul")])
  14675. +
  14676. +;; If operands 0 and 2 are in the same register, we have a problem.  But
  14677. +;; operands 0 and 1 (the usual case) can be in the same register.  That's
  14678. +;; why we have the strange constraints below.
  14679. +(define_insn "ashldi3_power"
  14680. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,&r")
  14681. +    (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,0,r")
  14682. +           (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
  14683. +   (clobber (match_scratch:SI 3 "=X,q,q,q"))]
  14684. +  "TARGET_POWER"
  14685. +  "@
  14686. +   {sli|slwi} %0,%L1,%h2\;{cal %L0,0(0)|li %L0,0}
  14687. +   sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2
  14688. +   sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2
  14689. +   sl%I2q %L0,%L1,%h2\;sll%I2q %0,%1,%h2"
  14690. +  [(set_attr "length" "8")])
  14691. +
  14692. +(define_insn "lshrdi3_power"
  14693. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,&r")
  14694. +    (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,0,r")
  14695. +             (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
  14696. +   (clobber (match_scratch:SI 3 "=X,q,q,q"))]
  14697. +  "TARGET_POWER"
  14698. +  "@
  14699. +   {s%A2i|s%A2wi} %L0,%1,%h2\;{cal %0,0(0)|li %0,0}
  14700. +   sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2
  14701. +   sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2
  14702. +   sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2"
  14703. +  [(set_attr "length" "8")])
  14704. +
  14705. +;; Shift by a variable amount is too complex to be worth open-coding.  We
  14706. +;; just handle shifts by constants.
  14707. +(define_insn "ashrdi3_power"
  14708. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
  14709. +    (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
  14710. +             (match_operand:SI 2 "const_int_operand" "M,i")))
  14711. +   (clobber (match_scratch:SI 3 "=X,q"))]
  14712. +  "TARGET_POWER"
  14713. +  "@
  14714. +   {srai|srawi} %0,%1,31\;{srai|srawi} %L0,%1,%h2
  14715. +   sraiq %0,%1,%h2\;srliq %L0,%L1,%h2"
  14716. +  [(set_attr "length" "8")])
  14717. +
  14718. +;; PowerPC64 DImode operations.
  14719. +
  14720. +(define_expand "adddi3"
  14721. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14722. +    (plus:DI (match_operand:DI 1 "gpc_reg_operand" "")
  14723. +         (match_operand:DI 2 "reg_or_cint_operand" "")))]
  14724. +  ""
  14725. +  "
  14726. +{
  14727. +  if (! TARGET_POWERPC64)
  14728. +    {
  14729. +      if (non_short_cint_operand (operands[2], DImode))
  14730. +    FAIL;
  14731. +    }
  14732. +  else
  14733. +    if (GET_CODE (operands[2]) == CONST_INT
  14734. +    && ! add_operand (operands[2], DImode))
  14735. +      {
  14736. +    rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  14737. +           ? operands[0] : gen_reg_rtx (DImode));
  14738. +
  14739. +    HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
  14740. +    HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
  14741. +
  14742. +    if (low & 0x8000)
  14743. +      high += 0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
  14744. +
  14745. +    emit_insn (gen_adddi3 (tmp, operands[1], GEN_INT (high)));
  14746. +    emit_insn (gen_adddi3 (operands[0], tmp, GEN_INT (low)));
  14747. +    DONE;
  14748. +      }
  14749. +}")
  14750. +
  14751. +;; Discourage ai/addic because of carry but provide it in an alternative
  14752. +;; allowing register zero as source.
  14753. +
  14754. +(define_insn "*adddi3_internal1"
  14755. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,?r,r")
  14756. +    (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,b,r,b")
  14757. +         (match_operand:DI 2 "add_operand" "r,I,I,L")))]
  14758. +  "TARGET_POWERPC64"
  14759. +  "@
  14760. +   add %0,%1,%2
  14761. +   addi %0,%1,%2
  14762. +   addic %0,%1,%2
  14763. +   addis %0,%1,%v2")
  14764. +
  14765. +(define_insn "*adddi3_internal2"
  14766. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  14767. +    (compare:CC (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r")
  14768. +                 (match_operand:DI 2 "reg_or_short_operand" "r,I"))
  14769. +            (const_int 0)))
  14770. +   (clobber (match_scratch:DI 3 "=r,r"))]
  14771. +  "TARGET_POWERPC64"
  14772. +  "@
  14773. +   add. %3,%1,%2
  14774. +   addic. %3,%1,%2"
  14775. +  [(set_attr "type" "compare")])
  14776. +
  14777. +(define_insn "*adddi3_internal3"
  14778. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  14779. +    (compare:CC (plus:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r")
  14780. +                 (match_operand:DI 2 "reg_or_short_operand" "r,I"))
  14781. +            (const_int 0)))
  14782. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  14783. +    (plus:DI (match_dup 1) (match_dup 2)))]
  14784. +  "TARGET_POWERPC64"
  14785. +  "@
  14786. +   add. %0,%1,%2
  14787. +   addic. %0,%1,%2"
  14788. +  [(set_attr "type" "compare")])
  14789. +
  14790. +;; Split an add that we can't do in one insn into two insns, each of which
  14791. +;; does one 16-bit part.  This is used by combine.  Note that the low-order
  14792. +;; add should be last in case the result gets used in an address.
  14793. +
  14794. +(define_split
  14795. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14796. +    (plus:DI (match_operand:DI 1 "gpc_reg_operand" "")
  14797. +         (match_operand:DI 2 "non_add_cint_operand" "")))]
  14798. +  "TARGET_POWERPC64"
  14799. +  [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 3)))
  14800. +   (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))]
  14801. +"
  14802. +{
  14803. +  HOST_WIDE_INT low = INTVAL (operands[2]) & 0xffff;
  14804. +  HOST_WIDE_INT high = INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff);
  14805. +
  14806. +  if (low & 0x8000)
  14807. +    high+=0x10000, low |= ((HOST_WIDE_INT) -1) << 16;
  14808. +
  14809. +  operands[3] = GEN_INT (high);
  14810. +  operands[4] = GEN_INT (low);
  14811. +}")
  14812. +
  14813. +(define_insn "one_cmpldi2"
  14814. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14815. +    (not:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
  14816. +  "TARGET_POWERPC64"
  14817. +  "nor %0,%1,%1")
  14818. +
  14819. +(define_insn ""
  14820. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  14821. +    (compare:CC (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  14822. +            (const_int 0)))
  14823. +   (clobber (match_scratch:DI 2 "=r"))]
  14824. +  "TARGET_POWERPC64"
  14825. +  "nor. %2,%1,%1"
  14826. +  [(set_attr "type" "compare")])
  14827. +
  14828. +(define_insn ""
  14829. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  14830. +    (compare:CC (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  14831. +            (const_int 0)))
  14832. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14833. +    (not:DI (match_dup 1)))]
  14834. +  "TARGET_POWERPC64"
  14835. +  "nor. %0,%1,%1"
  14836. +  [(set_attr "type" "compare")])
  14837. +
  14838. +(define_insn ""
  14839. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  14840. +    (minus:DI (match_operand:DI 1 "reg_or_short_operand" "r,I")
  14841. +          (match_operand:DI 2 "gpc_reg_operand" "r,r")))]
  14842. +  "TARGET_POWERPC64"
  14843. +  "@
  14844. +   subf %0,%2,%1
  14845. +   subfic %0,%2,%1")
  14846. +
  14847. +(define_insn ""
  14848. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  14849. +    (compare:CC (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  14850. +                  (match_operand:DI 2 "gpc_reg_operand" "r"))
  14851. +            (const_int 0)))
  14852. +   (clobber (match_scratch:DI 3 "=r"))]
  14853. +  "TARGET_POWERPC64"
  14854. +  "subf. %3,%2,%1"
  14855. +  [(set_attr "type" "compare")])
  14856. +
  14857. +(define_insn ""
  14858. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  14859. +    (compare:CC (minus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  14860. +                  (match_operand:DI 2 "gpc_reg_operand" "r"))
  14861. +            (const_int 0)))
  14862. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14863. +    (minus:DI (match_dup 1) (match_dup 2)))]
  14864. +  "TARGET_POWERPC64"
  14865. +  "subf. %0,%2,%1"
  14866. +  [(set_attr "type" "compare")])
  14867. +
  14868. +(define_expand "subdi3"
  14869. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14870. +    (minus:DI (match_operand:DI 1 "reg_or_short_operand" "")
  14871. +          (match_operand:DI 2 "reg_or_cint_operand" "")))]
  14872. +  ""
  14873. +  "
  14874. +{
  14875. +  if (GET_CODE (operands[2]) == CONST_INT)
  14876. +    {
  14877. +      emit_insn (gen_adddi3 (operands[0], operands[1],
  14878. +                 negate_rtx (DImode, operands[2])));
  14879. +      DONE;
  14880. +    }
  14881. +}")
  14882. +
  14883. +(define_insn "absdi2"
  14884. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
  14885. +    (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0")))
  14886. +   (clobber (match_scratch:DI 2 "=&r,&r"))]
  14887. +  "TARGET_POWERPC64"
  14888. +  "sradi %2,%1,63\;xor %0,%2,%1\;subf %0,%2,%0"
  14889. +  [(set_attr "length" "12")])
  14890. +
  14891. +(define_split
  14892. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
  14893. +    (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0")))
  14894. +   (clobber (match_scratch:DI 2 "=&r,&r"))]
  14895. +  "TARGET_POWERPC64 && reload_completed"
  14896. +  [(set (match_dup 2) (ashiftrt:DI (match_dup 1) (const_int 63)))
  14897. +   (set (match_dup 0) (xor:DI (match_dup 2) (match_dup 1)))
  14898. +   (set (match_dup 0) (minus:DI (match_dup 0) (match_dup 2)))]
  14899. +  "")
  14900. +
  14901. +(define_insn "*nabsdi2"
  14902. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
  14903. +    (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0"))))
  14904. +   (clobber (match_scratch:DI 2 "=&r,&r"))]
  14905. +  "TARGET_POWERPC64"
  14906. +  "sradi %2,%1,63\;xor %0,%2,%1\;subf %0,%0,%2"
  14907. +  [(set_attr "length" "12")])
  14908. +
  14909. +(define_split
  14910. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r")
  14911. +    (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r,0"))))
  14912. +   (clobber (match_scratch:DI 2 "=&r,&r"))]
  14913. +  "TARGET_POWERPC64 && reload_completed"
  14914. +  [(set (match_dup 2) (ashiftrt:DI (match_dup 1) (const_int 63)))
  14915. +   (set (match_dup 0) (xor:DI (match_dup 2) (match_dup 1)))
  14916. +   (set (match_dup 0) (minus:DI (match_dup 2) (match_dup 0)))]
  14917. +  "")
  14918. +
  14919. +(define_expand "negdi2"
  14920. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14921. +    (neg:DI (match_operand:DI 1 "gpc_reg_operand" "")))]
  14922. +  ""
  14923. +  "")
  14924. +
  14925. +(define_insn ""
  14926. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14927. +    (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
  14928. +  "TARGET_POWERPC64"
  14929. +  "neg %0,%1")
  14930. +
  14931. +(define_insn ""
  14932. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  14933. +    (compare:CC (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  14934. +            (const_int 0)))
  14935. +   (clobber (match_scratch:DI 2 "=r"))]
  14936. +  "TARGET_POWERPC64"
  14937. +  "neg. %2,%1"
  14938. +  [(set_attr "type" "compare")])
  14939. +
  14940. +(define_insn ""
  14941. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  14942. +    (compare:CC (neg:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  14943. +            (const_int 0)))
  14944. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14945. +    (neg:DI (match_dup 1)))]
  14946. +  "TARGET_POWERPC64"
  14947. +  "neg. %0,%1"
  14948. +  [(set_attr "type" "compare")])
  14949. +
  14950. +(define_insn "ffsdi2"
  14951. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
  14952. +    (ffs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))]
  14953. +  "TARGET_POWERPC64"
  14954. +  "neg %0,%1\;and %0,%0,%1\;cntlzd %0,%0\;subfic %0,%0,64"
  14955. +  [(set_attr "length" "16")])
  14956. +
  14957. +(define_insn "muldi3"
  14958. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14959. +    (mult:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  14960. +         (match_operand:DI 2 "gpc_reg_operand" "r")))]
  14961. +  "TARGET_POWERPC64"
  14962. +  "mulld %0,%1,%2"
  14963. +   [(set_attr "type" "imul")])
  14964. +
  14965. +(define_insn "smuldi3_highpart"
  14966. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14967. +    (truncate:DI
  14968. +     (lshiftrt:TI (mult:TI (sign_extend:TI
  14969. +                (match_operand:DI 1 "gpc_reg_operand" "%r"))
  14970. +                   (sign_extend:TI
  14971. +                (match_operand:DI 2 "gpc_reg_operand" "r")))
  14972. +              (const_int 64))))]
  14973. +  "TARGET_POWERPC64"
  14974. +  "mulhd %0,%1,%2"
  14975. +  [(set_attr "type" "imul")])
  14976. +
  14977. +(define_insn "umuldi3_highpart"
  14978. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  14979. +    (truncate:DI
  14980. +     (lshiftrt:TI (mult:TI (zero_extend:TI
  14981. +                (match_operand:DI 1 "gpc_reg_operand" "%r"))
  14982. +                   (zero_extend:TI
  14983. +                (match_operand:DI 2 "gpc_reg_operand" "r")))
  14984. +              (const_int 64))))]
  14985. +  "TARGET_POWERPC64"
  14986. +  "mulhdu %0,%1,%2"
  14987. +  [(set_attr "type" "imul")])
  14988. +
  14989. +(define_expand "divdi3"
  14990. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  14991. +    (div:DI (match_operand:DI 1 "gpc_reg_operand" "")
  14992. +        (match_operand:DI 2 "reg_or_cint_operand" "")))]
  14993. +  "TARGET_POWERPC64"
  14994. +  "
  14995. +{
  14996. +  if (GET_CODE (operands[2]) == CONST_INT
  14997. +      && exact_log2 (INTVAL (operands[2])) >= 0)
  14998. +    ;
  14999. +  else
  15000. +    operands[2] = force_reg (DImode, operands[2]);
  15001. +}")
  15002. +
  15003. +(define_expand "moddi3"
  15004. +  [(use (match_operand:DI 0 "gpc_reg_operand" ""))
  15005. +   (use (match_operand:DI 1 "gpc_reg_operand" ""))
  15006. +   (use (match_operand:DI 2 "reg_or_cint_operand" ""))]
  15007. +  "TARGET_POWERPC64"
  15008. +  "
  15009. +{
  15010. +  int i = exact_log2 (INTVAL (operands[2]));
  15011. +  rtx temp1;
  15012. +  rtx temp2;
  15013. +
  15014. +  if (GET_CODE (operands[2]) != CONST_INT || i < 0)
  15015. +    FAIL;
  15016. +
  15017. +  temp1 = gen_reg_rtx (DImode);
  15018. +  temp2 = gen_reg_rtx (DImode);
  15019. +
  15020. +  emit_insn (gen_divdi3 (temp1, operands[1], operands[2]));
  15021. +  emit_insn (gen_ashldi3 (temp2, temp1, GEN_INT (i)));
  15022. +  emit_insn (gen_subdi3 (operands[0], operands[1], temp2));
  15023. +  DONE;
  15024. +}")
  15025. +
  15026. +(define_insn ""
  15027. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15028. +    (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15029. +        (match_operand:DI 2 "const_int_operand" "N")))]
  15030. +  "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0"
  15031. +  "sradi %0,%1,%p2\;addze %0,%0"
  15032. +  [(set_attr "length" "8")])
  15033. +
  15034. +(define_insn ""
  15035. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15036. +    (compare:CC (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15037. +                (match_operand:DI 2 "const_int_operand" "N"))
  15038. +            (const_int 0)))
  15039. +   (clobber (match_scratch:DI 3 "=r"))]
  15040. +  "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0"
  15041. +  "sradi %3,%1,%p2\;addze. %3,%3"
  15042. +  [(set_attr "type" "compare")
  15043. +   (set_attr "length" "8")])
  15044. +
  15045. +(define_insn ""
  15046. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15047. +    (compare:CC (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15048. +                (match_operand:DI 2 "const_int_operand" "N"))
  15049. +            (const_int 0)))
  15050. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15051. +    (div:DI (match_dup 1) (match_dup 2)))]
  15052. +  "TARGET_POWERPC64 && exact_log2 (INTVAL (operands[2])) >= 0"
  15053. +  "sradi %0,%1,%p2\;addze. %0,%0"
  15054. +  [(set_attr "type" "compare")
  15055. +   (set_attr "length" "8")])
  15056. +
  15057. +(define_insn ""
  15058. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15059. +        (div:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15060. +                (match_operand:DI 2 "gpc_reg_operand" "r")))]
  15061. +  "TARGET_POWERPC64"
  15062. +  "divd %0,%1,%2"
  15063. +  [(set_attr "type" "idiv")])
  15064. +
  15065. +(define_insn "udivdi3"
  15066. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15067. +        (udiv:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15068. +                 (match_operand:DI 2 "gpc_reg_operand" "r")))]
  15069. +  "TARGET_POWERPC64"
  15070. +  "divdu %0,%1,%2"
  15071. +  [(set_attr "type" "idiv")])
  15072. +
  15073. +(define_insn "rotldi3"
  15074. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15075. +    (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15076. +           (match_operand:DI 2 "reg_or_cint_operand" "ri")))]
  15077. +  "TARGET_POWERPC64"
  15078. +  "rld%I2cl %0,%1,%H2,0")
  15079. +
  15080. +(define_insn "*rotldi3_internal2"
  15081. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15082. +    (compare:CC (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15083. +                   (match_operand:DI 2 "reg_or_cint_operand" "ri"))
  15084. +            (const_int 0)))
  15085. +   (clobber (match_scratch:DI 3 "=r"))]
  15086. +  "TARGET_POWERPC64"
  15087. +  "rld%I2cl. %3,%1,%H2,0"
  15088. +  [(set_attr "type" "delayed_compare")])
  15089. +
  15090. +(define_insn "*rotldi3_internal3"
  15091. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15092. +    (compare:CC (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15093. +                   (match_operand:DI 2 "reg_or_cint_operand" "ri"))
  15094. +            (const_int 0)))
  15095. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15096. +    (rotate:DI (match_dup 1) (match_dup 2)))]
  15097. +  "TARGET_POWERPC64"
  15098. +  "rld%I2cl. %0,%1,%H2,0"
  15099. +  [(set_attr "type" "delayed_compare")])
  15100. +
  15101. +(define_insn "*rotldi3_internal4"
  15102. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15103. +    (and:DI (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15104. +               (match_operand:DI 2 "reg_or_cint_operand" "ri"))
  15105. +        (match_operand:DI 3 "mask64_operand" "S")))]
  15106. +  "TARGET_POWERPC64"
  15107. +  "rld%I2c%B3 %0,%1,%H2,%S3")
  15108. +
  15109. +(define_insn "*rotldi3_internal5"
  15110. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15111. +    (compare:CC (and:DI
  15112. +             (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15113. +                (match_operand:DI 2 "reg_or_cint_operand" "ri"))
  15114. +             (match_operand:DI 3 "mask64_operand" "S"))
  15115. +            (const_int 0)))
  15116. +   (clobber (match_scratch:DI 4 "=r"))]
  15117. +  "TARGET_POWERPC64"
  15118. +  "rld%I2c%B3. %4,%1,%H2,%S3"
  15119. +  [(set_attr "type" "delayed_compare")])
  15120. +
  15121. +(define_insn "*rotldi3_internal6"
  15122. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  15123. +    (compare:CC (and:DI
  15124. +             (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15125. +                (match_operand:DI 2 "reg_or_cint_operand" "ri"))
  15126. +             (match_operand:DI 3 "mask64_operand" "S"))
  15127. +            (const_int 0)))
  15128. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15129. +    (and:DI (rotate:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
  15130. +  "TARGET_POWERPC64"
  15131. +  "rld%I2c%B3. %0,%1,%H2,%S3"
  15132. +  [(set_attr "type" "delayed_compare")])
  15133. +
  15134. +(define_insn "*rotldi3_internal7"
  15135. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15136. +    (zero_extend:DI
  15137. +     (subreg:QI
  15138. +      (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15139. +             (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0)))]
  15140. +  "TARGET_POWERPC64"
  15141. +  "rld%I2cl %0,%1,%H2,56")
  15142. +
  15143. +(define_insn "*rotldi3_internal8"
  15144. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15145. +    (compare:CC (zero_extend:DI
  15146. +             (subreg:QI
  15147. +              (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15148. +                 (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
  15149. +            (const_int 0)))
  15150. +   (clobber (match_scratch:DI 3 "=r"))]
  15151. +  "TARGET_POWERPC64"
  15152. +  "rld%I2cl. %3,%1,%H2,56"
  15153. +  [(set_attr "type" "delayed_compare")])
  15154. +
  15155. +(define_insn "*rotldi3_internal9"
  15156. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15157. +    (compare:CC (zero_extend:DI
  15158. +             (subreg:QI
  15159. +              (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15160. +                 (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
  15161. +            (const_int 0)))
  15162. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15163. +    (zero_extend:DI (subreg:QI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
  15164. +  "TARGET_POWERPC64"
  15165. +  "rld%I2cl. %0,%1,%H2,56"
  15166. +  [(set_attr "type" "delayed_compare")])
  15167. +
  15168. +(define_insn "*rotldi3_internal10"
  15169. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15170. +    (zero_extend:DI
  15171. +     (subreg:HI
  15172. +      (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15173. +             (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0)))]
  15174. +  "TARGET_POWERPC64"
  15175. +  "rld%I2cl %0,%1,%H2,48")
  15176. +
  15177. +(define_insn "*rotldi3_internal11"
  15178. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15179. +    (compare:CC (zero_extend:DI
  15180. +             (subreg:HI
  15181. +              (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15182. +                 (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
  15183. +            (const_int 0)))
  15184. +   (clobber (match_scratch:DI 3 "=r"))]
  15185. +  "TARGET_POWERPC64"
  15186. +  "rld%I2cl. %3,%1,%H2,48"
  15187. +  [(set_attr "type" "delayed_compare")])
  15188. +
  15189. +(define_insn "*rotldi3_internal12"
  15190. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15191. +    (compare:CC (zero_extend:DI
  15192. +             (subreg:HI
  15193. +              (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15194. +                 (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
  15195. +            (const_int 0)))
  15196. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15197. +    (zero_extend:DI (subreg:HI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
  15198. +  "TARGET_POWERPC64"
  15199. +  "rld%I2cl. %0,%1,%H2,48"
  15200. +  [(set_attr "type" "delayed_compare")])
  15201. +
  15202. +(define_insn "*rotldi3_internal13"
  15203. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15204. +    (zero_extend:DI
  15205. +     (subreg:SI
  15206. +      (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15207. +             (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0)))]
  15208. +  "TARGET_POWERPC64"
  15209. +  "rld%I2cl %0,%1,%H2,32")
  15210. +
  15211. +(define_insn "*rotldi3_internal14"
  15212. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15213. +    (compare:CC (zero_extend:DI
  15214. +             (subreg:SI
  15215. +              (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15216. +                 (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
  15217. +            (const_int 0)))
  15218. +   (clobber (match_scratch:DI 3 "=r"))]
  15219. +  "TARGET_POWERPC64"
  15220. +  "rld%I2cl. %3,%1,%H2,32"
  15221. +  [(set_attr "type" "delayed_compare")])
  15222. +
  15223. +(define_insn "*rotldi3_internal15"
  15224. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15225. +    (compare:CC (zero_extend:DI
  15226. +             (subreg:SI
  15227. +              (rotate:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15228. +                 (match_operand:DI 2 "reg_or_cint_operand" "ri")) 0))
  15229. +            (const_int 0)))
  15230. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15231. +    (zero_extend:DI (subreg:SI (rotate:DI (match_dup 1) (match_dup 2)) 0)))]
  15232. +  "TARGET_POWERPC64"
  15233. +  "rld%I2cl. %0,%1,%H2,32"
  15234. +  [(set_attr "type" "delayed_compare")])
  15235. +
  15236. +(define_expand "ashldi3"
  15237. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15238. +    (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15239. +           (match_operand:SI 2 "reg_or_cint_operand" "")))]
  15240. +  "TARGET_POWERPC64 || TARGET_POWER"
  15241. +  "
  15242. +{
  15243. +  if (TARGET_POWERPC64)
  15244. +    ;
  15245. +  else if (TARGET_POWER)
  15246. +    {
  15247. +      emit_insn (gen_ashldi3_power (operands[0], operands[1], operands[2]));
  15248. +      DONE;
  15249. +    }
  15250. +  else
  15251. +    FAIL;
  15252. +}")
  15253. +
  15254. +(define_insn ""
  15255. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15256. +    (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15257. +           (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
  15258. +  "TARGET_POWERPC64"
  15259. +  "sld%I2 %0,%1,%H2"
  15260. +  [(set_attr "length" "8")])
  15261. +  
  15262. +(define_insn ""
  15263. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15264. +    (compare:CC (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15265. +                   (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  15266. +            (const_int 0)))
  15267. +   (clobber (match_scratch:DI 3 "=r"))]
  15268. +  "TARGET_POWERPC64"
  15269. +  "sld%I2. %3,%1,%H2"
  15270. +  [(set_attr "type" "delayed_compare")])
  15271. +  
  15272. +(define_insn ""
  15273. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15274. +    (compare:CC (ashift:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15275. +                   (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  15276. +            (const_int 0)))
  15277. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15278. +    (ashift:DI (match_dup 1) (match_dup 2)))]
  15279. +  "TARGET_POWERPC64"
  15280. +  "sld%I2. %0,%1,%H2"
  15281. +  [(set_attr "type" "delayed_compare")])
  15282. +
  15283. +(define_expand "lshrdi3"
  15284. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15285. +    (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15286. +             (match_operand:SI 2 "reg_or_cint_operand" "")))]
  15287. +  "TARGET_POWERPC64 || TARGET_POWER"
  15288. +  "
  15289. +{
  15290. +  if (TARGET_POWERPC64)
  15291. +    ;
  15292. +  else if (TARGET_POWER)
  15293. +    {
  15294. +      emit_insn (gen_lshrdi3_power (operands[0], operands[1], operands[2]));
  15295. +      DONE;
  15296. +    }
  15297. +  else
  15298. +    FAIL;
  15299. +}")
  15300. +
  15301. +(define_insn ""
  15302. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15303. +    (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15304. +             (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
  15305. +  "TARGET_POWERPC64"
  15306. +  "srd%I2 %0,%1,%H2")
  15307. +
  15308. +(define_insn ""
  15309. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15310. +    (compare:CC (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15311. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  15312. +            (const_int 0)))
  15313. +   (clobber (match_scratch:DI 3 "=r"))]
  15314. +  "TARGET_POWERPC64"
  15315. +  "srd%I2. %3,%1,%H2"
  15316. +  [(set_attr "type" "delayed_compare")])
  15317. +
  15318. +(define_insn ""
  15319. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15320. +    (compare:CC (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15321. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  15322. +            (const_int 0)))
  15323. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15324. +    (lshiftrt:DI (match_dup 1) (match_dup 2)))]
  15325. +  "TARGET_POWERPC64"
  15326. +  "srd%I2. %0,%1,%H2"
  15327. +  [(set_attr "type" "delayed_compare")])
  15328. +
  15329. +(define_expand "ashrdi3"
  15330. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15331. +    (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15332. +             (match_operand:SI 2 "reg_or_cint_operand" "")))]
  15333. +  "TARGET_POWERPC64 || TARGET_POWER"
  15334. +  "
  15335. +{
  15336. +  if (TARGET_POWERPC64)
  15337. +    ;
  15338. +  else if (TARGET_POWER && GET_CODE (operands[2]) == CONST_INT)
  15339. +    {
  15340. +      emit_insn (gen_ashrdi3_power (operands[0], operands[1], operands[2]));
  15341. +      DONE;
  15342. +    }
  15343. +  else
  15344. +    FAIL;
  15345. +}")
  15346. +
  15347. +(define_insn ""
  15348. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15349. +    (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15350. +             (match_operand:SI 2 "reg_or_cint_operand" "ri")))]
  15351. +  "TARGET_POWERPC64"
  15352. +  "srad%I2 %0,%1,%H2")
  15353. +
  15354. +(define_insn ""
  15355. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15356. +    (compare:CC (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15357. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  15358. +            (const_int 0)))
  15359. +   (clobber (match_scratch:DI 3 "=r"))]
  15360. +  "TARGET_POWERPC64"
  15361. +  "srad%I2. %3,%1,%H2"
  15362. +  [(set_attr "type" "delayed_compare")])
  15363. +
  15364. +(define_insn ""
  15365. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15366. +    (compare:CC (ashiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  15367. +                 (match_operand:SI 2 "reg_or_cint_operand" "ri"))
  15368. +            (const_int 0)))
  15369. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15370. +    (ashiftrt:DI (match_dup 1) (match_dup 2)))]
  15371. +  "TARGET_POWERPC64"
  15372. +  "srad%I2. %0,%1,%H2"
  15373. +  [(set_attr "type" "delayed_compare")])
  15374. +
  15375. +(define_insn "anddi3"
  15376. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
  15377. +    (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r")
  15378. +        (match_operand:DI 2 "and64_operand" "?r,S,K,J")))
  15379. +   (clobber (match_scratch:CC 3 "=X,X,x,x"))]
  15380. +  "TARGET_POWERPC64"
  15381. +  "@
  15382. +   and %0,%1,%2
  15383. +   rldic%B2 %0,%1,0,%S2
  15384. +   andi. %0,%1,%b2
  15385. +   andis. %0,%1,%u2")
  15386. +
  15387. +(define_insn "*anddi3_internal2"
  15388. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x")
  15389. +    (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r")
  15390. +                (match_operand:DI 2 "and64_operand" "r,S,K,J"))
  15391. +            (const_int 0)))
  15392. +   (clobber (match_scratch:DI 3 "=r,r,r,r"))]
  15393. +  "TARGET_POWERPC64"
  15394. +  "@
  15395. +   and. %3,%1,%2
  15396. +   rldic%B2. %3,%1,0,%S2
  15397. +   andi. %3,%1,%b2
  15398. +   andis. %3,%1,%u2"
  15399. +  [(set_attr "type" "compare,delayed_compare,compare,compare")])
  15400. +
  15401. +(define_insn "*anddi3_internal3"
  15402. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x,x,x")
  15403. +    (compare:CC (and:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r")
  15404. +                (match_operand:DI 2 "and64_operand" "r,S,K,J"))
  15405. +            (const_int 0)))
  15406. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r")
  15407. +    (and:DI (match_dup 1) (match_dup 2)))]
  15408. +  "TARGET_POWERPC64"
  15409. +  "@
  15410. +   and. %0,%1,%2
  15411. +   rldic%B2. %0,%1,0,%S2
  15412. +   andi. %0,%1,%b2
  15413. +   andis. %0,%1,%u2"
  15414. +  [(set_attr "type" "compare,delayed_compare,compare,compare")])
  15415. +
  15416. +(define_expand "iordi3"
  15417. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15418. +    (ior:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15419. +        (match_operand:DI 2 "reg_or_u_cint_operand" "")))]
  15420. +  "TARGET_POWERPC64"
  15421. +  "
  15422. +{
  15423. +  if (GET_CODE (operands[2]) == CONST_INT
  15424. +      && ! logical_u_operand (operands[2], DImode))
  15425. +    {
  15426. +      HOST_WIDE_INT value = INTVAL (operands[2]);
  15427. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  15428. +         ? operands[0] : gen_reg_rtx (DImode));
  15429. +
  15430. +      emit_insn (gen_iordi3 (tmp, operands[1],
  15431. +                 GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
  15432. +      emit_insn (gen_iordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
  15433. +      DONE;
  15434. +    }
  15435. +  else if (GET_CODE (operands[2]) == CONST_DOUBLE
  15436. +      && ! logical_u_operand (operands[2], DImode))
  15437. +    {
  15438. +      HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
  15439. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  15440. +         ? operands[0] : gen_reg_rtx (DImode));
  15441. +
  15442. +      emit_insn (gen_iordi3 (tmp, operands[1],
  15443. +                 immed_double_const (value
  15444. +                         & (~ (HOST_WIDE_INT) 0xffff),
  15445. +                             0, DImode)));
  15446. +      emit_insn (gen_iordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
  15447. +      DONE;
  15448. +    }
  15449. +}")
  15450. +
  15451. +(define_insn "*iordi3_internal1"
  15452. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r")
  15453. +    (ior:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r")
  15454. +        (match_operand:DI 2 "logical_u_operand" "r,K,JF")))]
  15455. +  "TARGET_POWERPC64"
  15456. +  "@
  15457. +   or %0,%1,%2
  15458. +   ori %0,%1,%b2
  15459. +   oris %0,%1,%u2")
  15460. +
  15461. +(define_insn "*iordi3_internal2"
  15462. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15463. +    (compare:CC (ior:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15464. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15465. +            (const_int 0)))
  15466. +   (clobber (match_scratch:DI 3 "=r"))]
  15467. +  "TARGET_POWERPC64"
  15468. +  "or. %3,%1,%2"
  15469. +  [(set_attr "type" "compare")])
  15470. +
  15471. +(define_insn "*iordi3_internal3"
  15472. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15473. +    (compare:CC (ior:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15474. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15475. +            (const_int 0)))
  15476. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15477. +    (ior:DI (match_dup 1) (match_dup 2)))]
  15478. +  "TARGET_POWERPC64"
  15479. +  "or. %0,%1,%2"
  15480. +  [(set_attr "type" "compare")])
  15481. +
  15482. +;; Split an IOR that we can't do in one insn into two insns, each of which
  15483. +;; does one 16-bit part.  This is used by combine.
  15484. +
  15485. +(define_split
  15486. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15487. +    (ior:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15488. +        (match_operand:DI 2 "non_logical_u_cint_operand" "")))]
  15489. +  "TARGET_POWERPC64"
  15490. +  [(set (match_dup 0) (ior:DI (match_dup 1) (match_dup 3)))
  15491. +   (set (match_dup 0) (ior:DI (match_dup 0) (match_dup 4)))]
  15492. +"
  15493. +{
  15494. +  if (GET_CODE (operands[2]) == CONST_DOUBLE)
  15495. +    {
  15496. +      HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
  15497. +      operands[3] = immed_double_const (value & (~ (HOST_WIDE_INT) 0xffff),
  15498. +                    0, DImode);
  15499. +      operands[4] = GEN_INT (value & 0xffff);
  15500. +    }
  15501. +  else
  15502. +    {
  15503. +      operands[3] = GEN_INT (INTVAL (operands[2])
  15504. +                 & (~ (HOST_WIDE_INT) 0xffff));
  15505. +      operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
  15506. +    }
  15507. +}")
  15508. +
  15509. +(define_expand "xordi3"
  15510. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15511. +    (xor:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15512. +        (match_operand:DI 2 "reg_or_u_cint_operand" "")))]
  15513. +  "TARGET_POWERPC64"
  15514. +  "
  15515. +{
  15516. +  if (GET_CODE (operands[2]) == CONST_INT
  15517. +      && ! logical_u_operand (operands[2], DImode))
  15518. +    {
  15519. +      HOST_WIDE_INT value = INTVAL (operands[2]);
  15520. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  15521. +         ? operands[0] : gen_reg_rtx (DImode));
  15522. +
  15523. +      emit_insn (gen_xordi3 (tmp, operands[1],
  15524. +                 GEN_INT (value & (~ (HOST_WIDE_INT) 0xffff))));
  15525. +      emit_insn (gen_xordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
  15526. +      DONE;
  15527. +    }
  15528. +  else if (GET_CODE (operands[2]) == CONST_DOUBLE
  15529. +      && ! logical_u_operand (operands[2], DImode))
  15530. +    {
  15531. +      HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
  15532. +      rtx tmp = ((no_new_pseudos || rtx_equal_p (operands[0], operands[1]))
  15533. +         ? operands[0] : gen_reg_rtx (DImode));
  15534. +
  15535. +      emit_insn (gen_xordi3 (tmp, operands[1],
  15536. +                 immed_double_const (value
  15537. +                         & (~ (HOST_WIDE_INT) 0xffff),
  15538. +                             0, DImode)));
  15539. +      emit_insn (gen_xordi3 (operands[0], tmp, GEN_INT (value & 0xffff)));
  15540. +      DONE;
  15541. +    }
  15542. +}")
  15543. +
  15544. +(define_insn "*xordi3_internal1"
  15545. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r")
  15546. +    (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r")
  15547. +        (match_operand:DI 2 "logical_u_operand" "r,K,JF")))]
  15548. +  "TARGET_POWERPC64"
  15549. +  "@
  15550. +   xor %0,%1,%2
  15551. +   xori %0,%1,%b2
  15552. +   xoris %0,%1,%u2")
  15553. +
  15554. +(define_insn "*xordi3_internal2"
  15555. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15556. +    (compare:CC (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15557. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15558. +            (const_int 0)))
  15559. +   (clobber (match_scratch:DI 3 "=r"))]
  15560. +  "TARGET_POWERPC64"
  15561. +  "xor. %3,%1,%2"
  15562. +  [(set_attr "type" "compare")])
  15563. +
  15564. +(define_insn "*xordi3_internal3"
  15565. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15566. +    (compare:CC (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15567. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15568. +            (const_int 0)))
  15569. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15570. +    (xor:DI (match_dup 1) (match_dup 2)))]
  15571. +  "TARGET_POWERPC64"
  15572. +  "xor. %0,%1,%2"
  15573. +  [(set_attr "type" "compare")])
  15574. +
  15575. +;; Split an XOR that we can't do in one insn into two insns, each of which
  15576. +;; does one 16-bit part.  This is used by combine.
  15577. +
  15578. +(define_split
  15579. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  15580. +        (xor:DI (match_operand:DI 1 "gpc_reg_operand" "")
  15581. +                (match_operand:DI 2 "non_logical_u_cint_operand" "")))]
  15582. +  "TARGET_POWERPC64"
  15583. +  [(set (match_dup 0) (xor:DI (match_dup 1) (match_dup 3)))
  15584. +   (set (match_dup 0) (xor:DI (match_dup 0) (match_dup 4)))]
  15585. +"
  15586. +{
  15587. +  if (GET_CODE (operands[2]) == CONST_DOUBLE)
  15588. +    {
  15589. +      HOST_WIDE_INT value = CONST_DOUBLE_LOW (operands[2]);
  15590. +      operands[3] = immed_double_const (value & (~ (HOST_WIDE_INT) 0xffff),
  15591. +                    0, DImode);
  15592. +      operands[4] = GEN_INT (value & 0xffff);
  15593. +    }
  15594. +  else
  15595. +    {
  15596. +      operands[3] = GEN_INT (INTVAL (operands[2])
  15597. +                 & (~ (HOST_WIDE_INT) 0xffff));
  15598. +      operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
  15599. +    }
  15600. +}")
  15601. +
  15602. +(define_insn "*eqvdi3_internal1"
  15603. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15604. +    (not:DI (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15605. +            (match_operand:DI 2 "gpc_reg_operand" "r"))))]
  15606. +   "TARGET_POWERPC64"
  15607. +   "eqv %0,%1,%2")
  15608. +
  15609. +(define_insn "*eqvdi3_internal2"
  15610. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15611. +    (compare:CC (not:DI (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15612. +                    (match_operand:DI 2 "gpc_reg_operand" "r")))
  15613. +            (const_int 0)))
  15614. +   (clobber (match_scratch:DI 3 "=r"))]
  15615. +   "TARGET_POWERPC64"
  15616. +   "eqv. %3,%1,%2"
  15617. +   [(set_attr "type" "compare")])
  15618. +
  15619. +(define_insn "*eqvdi3_internal3"
  15620. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15621. +    (compare:CC (not:DI (xor:DI (match_operand:DI 1 "gpc_reg_operand" "%r")
  15622. +                    (match_operand:DI 2 "gpc_reg_operand" "r")))
  15623. +            (const_int 0)))
  15624. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15625. +    (not:DI (xor:DI (match_dup 1) (match_dup 2))))]
  15626. +   "TARGET_POWERPC64"
  15627. +   "eqv. %0,%1,%2"
  15628. +   [(set_attr "type" "compare")])
  15629. +
  15630. +(define_insn "*andcdi3_internal1"
  15631. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15632. +    (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  15633. +        (match_operand:DI 2 "gpc_reg_operand" "r")))]
  15634. +  "TARGET_POWERPC64"
  15635. +  "andc %0,%2,%1")
  15636. +
  15637. +(define_insn "*andcdi3_internal2"
  15638. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15639. +    (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  15640. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15641. +            (const_int 0)))
  15642. +   (clobber (match_scratch:DI 3 "=r"))]
  15643. +  "TARGET_POWERPC64"
  15644. +  "andc. %3,%2,%1"
  15645. +  [(set_attr "type" "compare")])
  15646. +
  15647. +(define_insn "*andcdi3_internal3"
  15648. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15649. +    (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  15650. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15651. +            (const_int 0)))
  15652. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15653. +    (and:DI (not:DI (match_dup 1)) (match_dup 2)))]
  15654. +  "TARGET_POWERPC64"
  15655. +  "andc. %0,%2,%1"
  15656. +  [(set_attr "type" "compare")])
  15657. +
  15658. +(define_insn "*iorcdi3_internal1"
  15659. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15660. +    (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  15661. +        (match_operand:DI 2 "gpc_reg_operand" "r")))]
  15662. +  "TARGET_POWERPC64"
  15663. +  "orc %0,%2,%1")
  15664. +
  15665. +(define_insn "*iorcdi3_inernal2"
  15666. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15667. +    (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  15668. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15669. +            (const_int 0)))
  15670. +   (clobber (match_scratch:DI 3 "=r"))]
  15671. +  "TARGET_POWERPC64"
  15672. +  "orc. %3,%2,%1"
  15673. +  [(set_attr "type" "compare")])
  15674. +
  15675. +(define_insn "*iorcdi3_internal3"
  15676. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15677. +    (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  15678. +                (match_operand:DI 2 "gpc_reg_operand" "r"))
  15679. +            (const_int 0)))
  15680. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15681. +    (ior:DI (not:DI (match_dup 1)) (match_dup 2)))]
  15682. +  "TARGET_POWERPC64"
  15683. +  "orc. %0,%2,%1"
  15684. +  [(set_attr "type" "compare")])
  15685. +
  15686. +(define_insn "*nanddi3_internal1"
  15687. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15688. +    (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
  15689. +        (not:DI (match_operand:DI 2 "gpc_reg_operand" "r"))))]
  15690. +  "TARGET_POWERPC64"
  15691. +  "nand %0,%1,%2")
  15692. +
  15693. +(define_insn "*nanddi3_internal2"
  15694. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15695. +    (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
  15696. +                (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
  15697. +            (const_int 0)))
  15698. +   (clobber (match_scratch:DI 3 "=r"))]
  15699. +  "TARGET_POWERPC64"
  15700. +  "nand. %3,%1,%2"
  15701. +  [(set_attr "type" "compare")])
  15702. +
  15703. +(define_insn "*nanddi3_internal3"
  15704. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15705. +    (compare:CC (ior:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
  15706. +                (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
  15707. +            (const_int 0)))
  15708. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15709. +    (ior:DI (not:DI (match_dup 1)) (not:DI (match_dup 2))))]
  15710. +  "TARGET_POWERPC64"
  15711. +  "nand. %0,%1,%2"
  15712. +  [(set_attr "type" "compare")])
  15713. +
  15714. +(define_insn "*nordi3_internal1"
  15715. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15716. +    (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
  15717. +        (not:DI (match_operand:DI 2 "gpc_reg_operand" "r"))))]
  15718. +  "TARGET_POWERPC64"
  15719. +  "nor %0,%1,%2")
  15720. +
  15721. +(define_insn "*nordi3_internal2"
  15722. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  15723. +    (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
  15724. +                (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
  15725. +            (const_int 0)))
  15726. +   (clobber (match_scratch:DI 3 "=r"))]
  15727. +  "TARGET_POWERPC64"
  15728. +  "nor. %3,%1,%2"
  15729. +  [(set_attr "type" "compare")])
  15730. +
  15731. +(define_insn "*nordi3_internal3"
  15732. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  15733. +    (compare:CC (and:DI (not:DI (match_operand:DI 1 "gpc_reg_operand" "%r"))
  15734. +                (not:DI (match_operand:DI 2 "gpc_reg_operand" "r")))
  15735. +            (const_int 0)))
  15736. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  15737. +    (and:DI (not:DI (match_dup 1)) (not:DI (match_dup 2))))]
  15738. +  "TARGET_POWERPC64"
  15739. +  "nor. %0,%1,%2"
  15740. +  [(set_attr "type" "compare")])
  15741. +
  15742. +;; Now define ways of moving data around.
  15743. +
  15744. +;; Elf specific ways of loading addresses for non-PIC code.
  15745. +;; The output of this could be r0, but we limit it to base
  15746. +;; registers, since almost all uses of this will need it
  15747. +;; in a base register shortly.
  15748. +(define_insn "elf_high"
  15749. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=b")
  15750. +    (high:SI (match_operand 1 "" "")))]
  15751. +  "TARGET_ELF && ! TARGET_64BIT"
  15752. +  "{liu|lis} %0,%1@ha")
  15753. +
  15754. +(define_insn "elf_low"
  15755. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  15756. +    (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
  15757. +           (match_operand 2 "" "")))]
  15758. +   "TARGET_ELF && ! TARGET_64BIT"
  15759. +   "{cal|la} %0,%2@l(%1)")
  15760. +
  15761. +;; Set up a register with a value from the GOT table
  15762. +
  15763. +(define_expand "movsi_got"
  15764. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  15765. +    (unspec [(match_operand:SI 1 "got_operand" "")
  15766. +         (match_dup 2)] 8))]
  15767. +  "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && flag_pic == 1"
  15768. +  "
  15769. +{
  15770. +  if (GET_CODE (operands[1]) == CONST)
  15771. +    {
  15772. +      rtx offset = const0_rtx;
  15773. +      HOST_WIDE_INT value;
  15774. +
  15775. +      operands[1] = eliminate_constant_term (XEXP (operands[1], 0), &offset);
  15776. +      value = INTVAL (offset);
  15777. +      if (value != 0)
  15778. +    {
  15779. +      rtx tmp = (no_new_pseudos ? operands[0] : gen_reg_rtx (Pmode));
  15780. +      emit_insn (gen_movsi_got (tmp, operands[1]));
  15781. +      emit_insn (gen_addsi3 (operands[0], tmp, offset));
  15782. +      DONE;
  15783. +    }
  15784. +    }
  15785. +
  15786. +  operands[2] = rs6000_got_register (operands[1]);
  15787. +}")
  15788. +
  15789. +(define_insn "*movsi_got_internal"
  15790. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  15791. +    (unspec [(match_operand:SI 1 "got_no_const_operand" "")
  15792. +         (match_operand:SI 2 "gpc_reg_operand" "b")] 8))]
  15793. +  "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && flag_pic == 1"
  15794. +  "{l|lwz} %0,%a1@got(%2)"
  15795. +  [(set_attr "type" "load")])
  15796. +
  15797. +;; Used by sched, shorten_branches and final when the GOT pseudo reg
  15798. +;; didn't get allocated to a hard register.
  15799. +(define_split 
  15800. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  15801. +    (unspec [(match_operand:SI 1 "got_no_const_operand" "")
  15802. +         (match_operand:SI 2 "memory_operand" "m")] 8))]
  15803. +  "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
  15804. +    && flag_pic == 1
  15805. +    && (reload_in_progress || reload_completed)"
  15806. +  [(set (match_dup 0) (match_dup 2))
  15807. +   (set (match_dup 0) (unspec [(match_dup 1)(match_dup 0)] 8))]
  15808. +  "")
  15809. +
  15810. +;; For SI, we special-case integers that can't be loaded in one insn.  We
  15811. +;; do the load 16-bits at a time.  We could do this by loading from memory,
  15812. +;; and this is even supposed to be faster, but it is simpler not to get
  15813. +;; integers in the TOC.
  15814. +(define_expand "movsi"
  15815. +  [(set (match_operand:SI 0 "general_operand" "")
  15816. +    (match_operand:SI 1 "any_operand" ""))]
  15817. +  ""
  15818. +  "
  15819. +{
  15820. +  if (GET_CODE (operands[0]) != REG)
  15821. +    operands[1] = force_reg (SImode, operands[1]);
  15822. +
  15823. +  /* Convert a move of a CONST_DOUBLE into a CONST_INT */
  15824. +  if (GET_CODE (operands[1]) == CONST_DOUBLE)
  15825. +    operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
  15826. +
  15827. +  /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
  15828. +  if (GET_CODE (operands[1]) == CONSTANT_P_RTX)
  15829. +    {
  15830. +      emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
  15831. +      DONE;
  15832. +    }
  15833. +
  15834. +  /* Use default pattern for address of ELF small data */
  15835. +  if (TARGET_ELF
  15836. +      && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
  15837. +      && (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == CONST)
  15838. +      && small_data_operand (operands[1], SImode))
  15839. +    {
  15840. +      emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
  15841. +      DONE;
  15842. +    }
  15843. +
  15844. +  if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
  15845. +      && flag_pic == 1 && got_operand (operands[1], SImode))
  15846. +    {
  15847. +      emit_insn (gen_movsi_got (operands[0], operands[1]));
  15848. +      DONE;
  15849. +    }
  15850. +
  15851. +  if (TARGET_ELF && TARGET_NO_TOC && ! TARGET_64BIT
  15852. +      && ! flag_pic
  15853. +      && CONSTANT_P (operands[1])
  15854. +      && GET_CODE (operands[1]) != HIGH
  15855. +      && GET_CODE (operands[1]) != CONST_INT)
  15856. +    {
  15857. +      rtx target = (no_new_pseudos ? operands[0] : gen_reg_rtx (SImode));
  15858. +
  15859. +      /* If this is a function address on -mcall-aixdesc or -mcall-nt,
  15860. +     convert it to the address of the descriptor.  */
  15861. +      if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
  15862. +      && GET_CODE (operands[1]) == SYMBOL_REF
  15863. +      && XSTR (operands[1], 0)[0] == '.')
  15864. +    {
  15865. +      char *name = XSTR (operands[1], 0);
  15866. +      rtx new_ref;
  15867. +      while (*name == '.')
  15868. +        name++;
  15869. +      new_ref = gen_rtx_SYMBOL_REF (Pmode, name);
  15870. +      CONSTANT_POOL_ADDRESS_P (new_ref) = CONSTANT_POOL_ADDRESS_P (operands[1]);
  15871. +      SYMBOL_REF_FLAG (new_ref) = SYMBOL_REF_FLAG (operands[1]);
  15872. +      SYMBOL_REF_USED (new_ref) = SYMBOL_REF_USED (operands[1]);
  15873. +      operands[1] = new_ref;
  15874. +    }
  15875. +
  15876. +      emit_insn (gen_elf_high (target, operands[1]));
  15877. +      emit_insn (gen_elf_low (operands[0], target, operands[1]));
  15878. +      DONE;
  15879. +    }
  15880. +
  15881. +  if (GET_CODE (operands[1]) == CONST
  15882. +      && DEFAULT_ABI == ABI_NT
  15883. +      && ! side_effects_p (operands[0]))
  15884. +    {
  15885. +      rtx const_term = const0_rtx;
  15886. +      rtx sym = eliminate_constant_term (XEXP (operands[1], 0), &const_term);
  15887. +      if (sym && GET_CODE (const_term) == CONST_INT
  15888. +      && (GET_CODE (sym) == SYMBOL_REF || GET_CODE (sym) == LABEL_REF))
  15889. +    {
  15890. +      unsigned HOST_WIDE_INT value = INTVAL (const_term);
  15891. +      int new_reg_p = (flag_expensive_optimizations && ! no_new_pseudos);
  15892. +      rtx tmp1 = ((new_reg_p && value != 0)
  15893. +              ? gen_reg_rtx (SImode) : operands[0]);
  15894. +
  15895. +      emit_insn (gen_movsi (tmp1, sym));
  15896. +      if (INTVAL (const_term) != 0)
  15897. +        emit_insn (gen_addsi3 (operands[0], tmp1, GEN_INT (value)));
  15898. +      DONE;
  15899. +    }
  15900. +      else
  15901. +    rs6000_fatal_bad_address (operands[1]);
  15902. +    }
  15903. +
  15904. +  if ((! TARGET_WINDOWS_NT || DEFAULT_ABI != ABI_NT)
  15905. +      && CONSTANT_P (operands[1])
  15906. +      && GET_CODE (operands[1]) != CONST_INT
  15907. +      && GET_CODE (operands[1]) != HIGH
  15908. +      && ! LEGITIMATE_CONSTANT_POOL_ADDRESS_P (operands[1]))
  15909. +    {
  15910. +      /* Emit a USE operation so that the constant isn't deleted if
  15911. +     expensive optimizations are turned on because nobody
  15912. +     references it.  This should only be done for operands that
  15913. +     contain SYMBOL_REFs with CONSTANT_POOL_ADDRESS_P set.
  15914. +     This should not be done for operands that contain LABEL_REFs.
  15915. +     For now, we just handle the obvious case.  */
  15916. +      if (GET_CODE (operands[1]) != LABEL_REF)
  15917. +    emit_insn (gen_rtx_USE (VOIDmode, operands[1]));
  15918. +
  15919. +      /* If we are to limit the number of things we put in the TOC and
  15920. +     this is a symbol plus a constant we can add in one insn,
  15921. +     just put the symbol in the TOC and add the constant.  Don't do
  15922. +     this if reload is in progress.  */
  15923. +      if (GET_CODE (operands[1]) == CONST
  15924. +      && TARGET_NO_SUM_IN_TOC && ! reload_in_progress
  15925. +      && GET_CODE (XEXP (operands[1], 0)) == PLUS
  15926. +      && add_operand (XEXP (XEXP (operands[1], 0), 1), SImode)
  15927. +      && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
  15928. +          || GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == SYMBOL_REF)
  15929. +      && ! side_effects_p (operands[0]))
  15930. +    {
  15931. +      rtx sym = force_const_mem (SImode, XEXP (XEXP (operands[1], 0), 0));
  15932. +      rtx other = XEXP (XEXP (operands[1], 0), 1);
  15933. +
  15934. +      emit_insn (gen_addsi3 (operands[0], force_reg (SImode, sym), other));
  15935. +      DONE;
  15936. +    }
  15937. +
  15938. +      operands[1] = force_const_mem (SImode, operands[1]);
  15939. +      if (! memory_address_p (SImode, XEXP (operands[1], 0))
  15940. +      && ! reload_in_progress)
  15941. +    operands[1] = change_address (operands[1], SImode,
  15942. +                      XEXP (operands[1], 0));
  15943. +    }
  15944. +}")
  15945. +
  15946. +(define_insn ""
  15947. +  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,m,r,r,r,r,r,*q,*c*l,*h")
  15948. +    (match_operand:SI 1 "input_operand" "r,U,m,r,I,L,n,R,*h,r,r,0"))]
  15949. +  "gpc_reg_operand (operands[0], SImode)
  15950. +   || gpc_reg_operand (operands[1], SImode)"
  15951. +  "@
  15952. +   mr %0,%1
  15953. +   {cal|la} %0,%a1
  15954. +   {l%U1%X1|lwz%U1%X1} %0,%1
  15955. +   {st%U0%X0|stw%U0%X0} %1,%0
  15956. +   {lil|li} %0,%1
  15957. +   {liu|lis} %0,%v1
  15958. +   #
  15959. +   {cal|la} %0,%1(%*)
  15960. +   mf%1 %0
  15961. +   mt%0 %1
  15962. +   mt%0 %1
  15963. +   cror 0,0,0"
  15964. +  [(set_attr "type" "*,*,load,store,*,*,*,*,*,*,mtjmpr,*")
  15965. +   (set_attr "length" "4,4,4,4,4,4,8,4,4,4,4,4")])
  15966. +
  15967. +;; Split a load of a large constant into the appropriate two-insn
  15968. +;; sequence.
  15969. +
  15970. +(define_split
  15971. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  15972. +    (match_operand:SI 1 "const_int_operand" ""))]
  15973. +  "(unsigned HOST_WIDE_INT) (INTVAL (operands[1]) + 0x8000) >= 0x10000
  15974. +   && (INTVAL (operands[1]) & 0xffff) != 0"
  15975. +  [(set (match_dup 0)
  15976. +    (match_dup 2))
  15977. +   (set (match_dup 0)
  15978. +    (ior:SI (match_dup 0)
  15979. +        (match_dup 3)))]
  15980. +  "
  15981. +{
  15982. +  operands[2] = GEN_INT (INTVAL (operands[1]) & 0xffff0000);
  15983. +  operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff);
  15984. +}")
  15985. +
  15986. +(define_insn ""
  15987. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  15988. +    (compare:CC (match_operand:SI 1 "gpc_reg_operand" "r")
  15989. +            (const_int 0)))
  15990. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r") (match_dup 1))]
  15991. +  "! TARGET_POWERPC64"
  15992. +  "mr. %0,%1"
  15993. +  [(set_attr "type" "compare")])
  15994. +
  15995. +(define_expand "movhi"
  15996. +  [(set (match_operand:HI 0 "general_operand" "")
  15997. +    (match_operand:HI 1 "any_operand" ""))]
  15998. +  ""
  15999. +  "
  16000. +{
  16001. +  if (GET_CODE (operands[0]) != REG)
  16002. +    operands[1] = force_reg (HImode, operands[1]);
  16003. +
  16004. +  if (CONSTANT_P (operands[1])
  16005. +      && GET_CODE (operands[1]) != CONST_INT)
  16006. +    {
  16007. +      operands[1] = force_const_mem (HImode, operands[1]);
  16008. +      if (! memory_address_p (HImode, XEXP (operands[1], 0))
  16009. +      && ! reload_in_progress)
  16010. +    operands[1] = change_address (operands[1], HImode,
  16011. +                      XEXP (operands[1], 0));
  16012. +    }
  16013. +}")
  16014. +
  16015. +(define_insn ""
  16016. +  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*q,*c*l,*h")
  16017. +    (match_operand:HI 1 "input_operand" "r,m,r,i,*h,r,r,0"))]
  16018. +  "gpc_reg_operand (operands[0], HImode)
  16019. +   || gpc_reg_operand (operands[1], HImode)"
  16020. +  "@
  16021. +   mr %0,%1
  16022. +   lhz%U1%X1 %0,%1
  16023. +   sth%U0%X0 %1,%0
  16024. +   {lil|li} %0,%w1
  16025. +   mf%1 %0
  16026. +   mt%0 %1
  16027. +   mt%0 %1
  16028. +   cror 0,0,0"
  16029. +  [(set_attr "type" "*,load,store,*,*,*,mtjmpr,*")])
  16030. +
  16031. +(define_expand "movqi"
  16032. +  [(set (match_operand:QI 0 "general_operand" "")
  16033. +    (match_operand:QI 1 "any_operand" ""))]
  16034. +  ""
  16035. +  "
  16036. +{
  16037. +  if (GET_CODE (operands[0]) != REG)
  16038. +    operands[1] = force_reg (QImode, operands[1]);
  16039. +
  16040. +  if (CONSTANT_P (operands[1])
  16041. +      && GET_CODE (operands[1]) != CONST_INT)
  16042. +    {
  16043. +      operands[1] = force_const_mem (QImode, operands[1]);
  16044. +      if (! memory_address_p (QImode, XEXP (operands[1], 0))
  16045. +      && ! reload_in_progress)
  16046. +    operands[1] = change_address (operands[1], QImode,
  16047. +                      XEXP (operands[1], 0));
  16048. +    }
  16049. +}")
  16050. +
  16051. +(define_insn ""
  16052. +  [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*q,*c*l,*h")
  16053. +    (match_operand:QI 1 "input_operand" "r,m,r,i,*h,r,r,0"))]
  16054. +  "gpc_reg_operand (operands[0], QImode)
  16055. +   || gpc_reg_operand (operands[1], QImode)"
  16056. +  "@
  16057. +   mr %0,%1
  16058. +   lbz%U1%X1 %0,%1
  16059. +   stb%U0%X0 %1,%0
  16060. +   {lil|li} %0,%1
  16061. +   mf%1 %0
  16062. +   mt%0 %1
  16063. +   mt%0 %1
  16064. +   cror 0,0,0"
  16065. +  [(set_attr "type" "*,load,store,*,*,*,mtjmpr,*")])
  16066. +
  16067. +;; Here is how to move condition codes around.  When we store CC data in
  16068. +;; an integer register or memory, we store just the high-order 4 bits.
  16069. +;; This lets us not shift in the most common case of CR0.
  16070. +(define_expand "movcc"
  16071. +  [(set (match_operand:CC 0 "nonimmediate_operand" "")
  16072. +    (match_operand:CC 1 "nonimmediate_operand" ""))]
  16073. +  ""
  16074. +  "")
  16075. +
  16076. +(define_insn ""
  16077. +  [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,y,r,r,r,r,m")
  16078. +    (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,m,r"))]
  16079. +  "register_operand (operands[0], CCmode)
  16080. +   || register_operand (operands[1], CCmode)"
  16081. +  "@
  16082. +   mcrf %0,%1
  16083. +   mtcrf 128,%1
  16084. +   {rlinm|rlwinm} %1,%1,%F0,0xffffffff\;mtcrf %R0,%1\;{rlinm|rlwinm} %1,%1,%f0,0xffffffff
  16085. +   mfcr %0
  16086. +   mfcr %0\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000
  16087. +   mr %0,%1
  16088. +   {l%U1%X1|lwz%U1%X1} %0,%1
  16089. +   {st%U0%U1|stw%U0%U1} %1,%0"
  16090. +  [(set_attr "type" "*,*,*,compare,*,*,load,store")
  16091. +   (set_attr "length" "*,*,12,*,8,*,*,*")])
  16092. +
  16093. +;; For floating-point, we normally deal with the floating-point registers
  16094. +;; unless -msoft-float is used.  The sole exception is that parameter passing
  16095. +;; can produce floating-point values in fixed-point registers.  Unless the
  16096. +;; value is a simple constant or already in memory, we deal with this by
  16097. +;; allocating memory and copying the value explicitly via that memory location.
  16098. +(define_expand "movsf"
  16099. +  [(set (match_operand:SF 0 "nonimmediate_operand" "")
  16100. +    (match_operand:SF 1 "any_operand" ""))]
  16101. +  ""
  16102. +  "
  16103. +{
  16104. +  /* If we are called from reload, we might be getting a SUBREG of a hard
  16105. +     reg.  So expand it.  */
  16106. +  if (GET_CODE (operands[0]) == SUBREG
  16107. +      && GET_CODE (SUBREG_REG (operands[0])) == REG
  16108. +      && REGNO (SUBREG_REG (operands[0])) < FIRST_PSEUDO_REGISTER)
  16109. +    operands[0] = alter_subreg (operands[0]);
  16110. +  if (GET_CODE (operands[1]) == SUBREG
  16111. +      && GET_CODE (SUBREG_REG (operands[1])) == REG
  16112. +      && REGNO (SUBREG_REG (operands[1])) < FIRST_PSEUDO_REGISTER)
  16113. +    operands[1] = alter_subreg (operands[1]);
  16114. +
  16115. +  if (GET_CODE (operands[0]) == MEM)
  16116. +    {
  16117. +      /* If operands[1] is a register, it may have double-precision data
  16118. +     in it, so truncate it to single precision.  We need not do
  16119. +     this for POWERPC.  */
  16120. +      if (! TARGET_POWERPC && TARGET_HARD_FLOAT
  16121. +      && GET_CODE (operands[1]) == REG
  16122. +      && (FP_REGNO_P (REGNO (operands[1]))
  16123. +          || REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER))
  16124. +    {
  16125. +      rtx newreg = (no_new_pseudos ? operands[1] : gen_reg_rtx (SFmode));
  16126. +      emit_insn (gen_aux_truncdfsf2 (newreg, operands[1]));
  16127. +      operands[1] = newreg;
  16128. +    }
  16129. +
  16130. +      operands[1] = force_reg (SFmode, operands[1]);
  16131. +    }
  16132. +
  16133. +  if (CONSTANT_P (operands[1]) && TARGET_HARD_FLOAT
  16134. +      && ! easy_fp_constant (operands[1], SFmode))
  16135. +    {
  16136. +      operands[1] = force_const_mem (SFmode, operands[1]);
  16137. +      if (! memory_address_p (SFmode, XEXP (operands[1], 0))
  16138. +      && ! reload_in_progress)
  16139. +    operands[1] = change_address (operands[1], SFmode,
  16140. +                      XEXP (operands[1], 0));
  16141. +    }
  16142. +}")
  16143. +
  16144. +(define_split
  16145. +  [(set (match_operand:SF 0 "gpc_reg_operand" "")
  16146. +    (match_operand:SF 1 "const_double_operand" ""))]
  16147. +  "reload_completed
  16148. +   && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
  16149. +       || (GET_CODE (operands[0]) == SUBREG
  16150. +       && GET_CODE (SUBREG_REG (operands[0])) == REG
  16151. +       && REGNO (SUBREG_REG (operands[0])) <= 31))"
  16152. +  [(set (match_dup 2) (match_dup 3))]
  16153. +  "
  16154. +{
  16155. +  long l;
  16156. +  REAL_VALUE_TYPE rv;
  16157. +
  16158. +  REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
  16159. +  REAL_VALUE_TO_TARGET_SINGLE (rv, l);
  16160. +
  16161. +  if (! TARGET_POWERPC64)
  16162. +    operands[2] = operand_subword (operands[0], 0, 0, SFmode);
  16163. +  else
  16164. +    operands[2] = gen_lowpart (SImode, operands[0]);
  16165. +
  16166. +  operands[3] = GEN_INT(l);
  16167. +}")
  16168. +
  16169. +(define_insn "*movsf_hardfloat"
  16170. +  [(set (match_operand:SF 0 "nonimmediate_operand" "=!r,!r,m,f,f,m,!r,!r")
  16171. +    (match_operand:SF 1 "input_operand" "r,m,r,f,m,f,G,Fn"))]
  16172. +  "(gpc_reg_operand (operands[0], SFmode)
  16173. +   || gpc_reg_operand (operands[1], SFmode)) && TARGET_HARD_FLOAT"
  16174. +  "@
  16175. +   mr %0,%1
  16176. +   {l%U1%X1|lwz%U1%X1} %0,%1
  16177. +   {st%U0%X0|stw%U0%X0} %1,%0
  16178. +   fmr %0,%1
  16179. +   lfs%U1%X1 %0,%1
  16180. +   stfs%U0%X0 %1,%0
  16181. +   #
  16182. +   #"
  16183. +  [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*")
  16184. +   (set_attr "length" "4,4,4,4,4,4,4,8")])
  16185. +
  16186. +(define_insn "*movsf_softfloat"
  16187. +  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,r")
  16188. +    (match_operand:SF 1 "input_operand" "r,m,r,I,L,R,G,Fn"))]
  16189. +  "(gpc_reg_operand (operands[0], SFmode)
  16190. +   || gpc_reg_operand (operands[1], SFmode)) && TARGET_SOFT_FLOAT"
  16191. +  "@
  16192. +   mr %0,%1
  16193. +   {l%U1%X1|lwz%U1%X1} %0,%1
  16194. +   {st%U0%X0|stw%U0%X0} %1,%0
  16195. +   {lil|li} %0,%1
  16196. +   {liu|lis} %0,%v1
  16197. +   {cal|la} %0,%1(%*)
  16198. +   #
  16199. +   #"
  16200. +  [(set_attr "type" "*,load,store,*,*,*,*,*")
  16201. +   (set_attr "length" "4,4,4,4,4,4,4,8")])
  16202. +
  16203. +
  16204. +(define_expand "movdf"
  16205. +  [(set (match_operand:DF 0 "nonimmediate_operand" "")
  16206. +    (match_operand:DF 1 "any_operand" ""))]
  16207. +  ""
  16208. +  "
  16209. +{
  16210. +  if (GET_CODE (operands[0]) != REG)
  16211. +    operands[1] = force_reg (DFmode, operands[1]);
  16212. +
  16213. +  if (CONSTANT_P (operands[1]) && ! easy_fp_constant (operands[1], DFmode))
  16214. +    {
  16215. +      operands[1] = force_const_mem (DFmode, operands[1]);
  16216. +      if (! memory_address_p (DFmode, XEXP (operands[1], 0))
  16217. +      && ! reload_in_progress)
  16218. +    operands[1] = change_address (operands[1], DFmode,
  16219. +                      XEXP (operands[1], 0));
  16220. +    }
  16221. +}")
  16222. +
  16223. +(define_split
  16224. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  16225. +    (match_operand:DF 1 "const_int_operand" ""))]
  16226. +  "! TARGET_POWERPC64 && reload_completed
  16227. +   && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
  16228. +       || (GET_CODE (operands[0]) == SUBREG
  16229. +       && GET_CODE (SUBREG_REG (operands[0])) == REG
  16230. +       && REGNO (SUBREG_REG (operands[0])) <= 31))"
  16231. +  [(set (match_dup 2) (match_dup 4))
  16232. +   (set (match_dup 3) (match_dup 1))]
  16233. +  "
  16234. +{
  16235. +  int endian = (WORDS_BIG_ENDIAN == 0);
  16236. +  operands[2] = operand_subword (operands[0], endian, 0, DFmode);
  16237. +  operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
  16238. +  operands[4] = (INTVAL (operands[1]) & 0x80000000) ? constm1_rtx : const0_rtx;
  16239. +}")
  16240. +
  16241. +(define_split
  16242. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  16243. +    (match_operand:DF 1 "const_double_operand" ""))]
  16244. +  "! TARGET_POWERPC64 && reload_completed
  16245. +   && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
  16246. +       || (GET_CODE (operands[0]) == SUBREG
  16247. +       && GET_CODE (SUBREG_REG (operands[0])) == REG
  16248. +       && REGNO (SUBREG_REG (operands[0])) <= 31))"
  16249. +  [(set (match_dup 2) (match_dup 4))
  16250. +   (set (match_dup 3) (match_dup 5))]
  16251. +  "
  16252. +{
  16253. +  int endian = (WORDS_BIG_ENDIAN == 0);
  16254. +  long l[2];
  16255. +  REAL_VALUE_TYPE rv;
  16256. +
  16257. +  REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
  16258. +  REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
  16259. +
  16260. +  operands[2] = operand_subword (operands[0], endian, 0, DFmode);
  16261. +  operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
  16262. +  operands[4] = GEN_INT (l[endian]);
  16263. +  operands[5] = GEN_INT (l[1 - endian]);
  16264. +}")
  16265. +
  16266. +(define_split
  16267. +  [(set (match_operand:DF 0 "gpc_reg_operand" "")
  16268. +    (match_operand:DF 1 "easy_fp_constant" ""))]
  16269. +  "TARGET_POWERPC64 && reload_completed
  16270. +   && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
  16271. +       || (GET_CODE (operands[0]) == SUBREG
  16272. +       && GET_CODE (SUBREG_REG (operands[0])) == REG
  16273. +       && REGNO (SUBREG_REG (operands[0])) <= 31))"
  16274. +  [(set (match_dup 2) (match_dup 3))]
  16275. +  "
  16276. +{
  16277. +  int endian = (WORDS_BIG_ENDIAN == 0);
  16278. +  long l[2];
  16279. +  REAL_VALUE_TYPE rv;
  16280. +
  16281. +  REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
  16282. +  REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
  16283. +
  16284. +  operands[2] = gen_lowpart (DImode, operands[0]);
  16285. +  /* HIGHPART is lower memory address when WORDS_BIG_ENDIAN.  */
  16286. +  operands[3] = immed_double_const (l[1 - endian], l[endian], DImode);
  16287. +}")
  16288. +
  16289. +;; Don't have reload use general registers to load a constant.  First,
  16290. +;; it might not work if the output operand is the equivalent of
  16291. +;; a non-offsettable memref, but also it is less efficient than loading
  16292. +;; the constant into an FP register, since it will probably be used there.
  16293. +;; The "??" is a kludge until we can figure out a more reasonable way
  16294. +;; of handling these non-offsettable values.
  16295. +(define_insn "*movdf_hardfloat32"
  16296. +  [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,!r,!r,!r,f,f,m")
  16297. +    (match_operand:DF 1 "input_operand" "r,m,r,G,H,F,f,m,f"))]
  16298. +  "! TARGET_POWERPC64 && TARGET_HARD_FLOAT
  16299. +   && (gpc_reg_operand (operands[0], DFmode)
  16300. +       || gpc_reg_operand (operands[1], DFmode))"
  16301. +  "*
  16302. +{
  16303. +  switch (which_alternative)
  16304. +    {
  16305. +    default:
  16306. +      abort ();
  16307. +    case 0:
  16308. +      /* We normally copy the low-numbered register first.  However, if
  16309. +     the first register operand 0 is the same as the second register
  16310. +     of operand 1, we must copy in the opposite order.  */
  16311. +      if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
  16312. +    return \"mr %L0,%L1\;mr %0,%1\";
  16313. +      else
  16314. +    return \"mr %0,%1\;mr %L0,%L1\";
  16315. +    case 1:
  16316. +      if (offsettable_memref_p (operands[1])
  16317. +      || (GET_CODE (operands[1]) == MEM
  16318. +          && (GET_CODE (XEXP (operands[1], 0)) == LO_SUM
  16319. +          || GET_CODE (XEXP (operands[1], 0)) == PRE_INC
  16320. +          || GET_CODE (XEXP (operands[1], 0)) == PRE_DEC)))
  16321. +    {
  16322. +      /* If the low-address word is used in the address, we must load
  16323. +         it last.  Otherwise, load it first.  Note that we cannot have
  16324. +         auto-increment in that case since the address register is
  16325. +         known to be dead.  */
  16326. +      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  16327. +                 operands[1], 0))
  16328. +        return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
  16329. +      else
  16330. +        return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
  16331. +    }
  16332. +      else
  16333. +    {
  16334. +      rtx addreg;
  16335. +
  16336. +      addreg = find_addr_reg (XEXP (operands[1], 0));
  16337. +      if (refers_to_regno_p (REGNO (operands[0]),
  16338. +                 REGNO (operands[0]) + 1,
  16339. +                 operands[1], 0))
  16340. +        {
  16341. +          output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
  16342. +          output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
  16343. +          output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
  16344. +          return \"{lx|lwzx} %0,%1\";
  16345. +        }
  16346. +      else
  16347. +        {
  16348. +          output_asm_insn (\"{lx|lwzx} %0,%1\", operands);
  16349. +          output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
  16350. +          output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
  16351. +          output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
  16352. +          return \"\";
  16353. +        }
  16354. +    }
  16355. +    case 2:
  16356. +      if (offsettable_memref_p (operands[0])
  16357. +      || (GET_CODE (operands[0]) == MEM
  16358. +          && (GET_CODE (XEXP (operands[0], 0)) == LO_SUM
  16359. +          || GET_CODE (XEXP (operands[0], 0)) == PRE_INC
  16360. +          || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)))
  16361. +    return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
  16362. +      else
  16363. +    {
  16364. +      rtx addreg;
  16365. +
  16366. +      addreg = find_addr_reg (XEXP (operands[0], 0));
  16367. +      output_asm_insn (\"{stx|stwx} %1,%0\", operands);
  16368. +      output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
  16369. +      output_asm_insn (\"{stx|stwx} %L1,%0\", operands);
  16370. +      output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
  16371. +      return \"\";
  16372. +    }
  16373. +    case 3:
  16374. +    case 4:
  16375. +    case 5:
  16376. +      return \"#\";
  16377. +    case 6:
  16378. +      return \"fmr %0,%1\";
  16379. +    case 7:
  16380. +      return \"lfd%U1%X1 %0,%1\";
  16381. +    case 8:
  16382. +      return \"stfd%U0%X0 %1,%0\";
  16383. +    }
  16384. +}"
  16385. +  [(set_attr "type" "*,load,store,*,*,*,fp,fpload,fpstore")
  16386. +   (set_attr "length" "8,16,16,8,12,16,*,*,*")])
  16387. +
  16388. +(define_insn "*movdf_softfloat32"
  16389. +  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
  16390. +    (match_operand:DF 1 "input_operand" "r,m,r,G,H,F"))]
  16391. +  "! TARGET_POWERPC64 && TARGET_SOFT_FLOAT
  16392. +   && (gpc_reg_operand (operands[0], DFmode)
  16393. +       || gpc_reg_operand (operands[1], DFmode))"
  16394. +  "*
  16395. +{
  16396. +  switch (which_alternative)
  16397. +    {
  16398. +    default:
  16399. +      abort ();
  16400. +    case 0:
  16401. +      /* We normally copy the low-numbered register first.  However, if
  16402. +     the first register operand 0 is the same as the second register of
  16403. +     operand 1, we must copy in the opposite order.  */
  16404. +      if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
  16405. +    return \"mr %L0,%L1\;mr %0,%1\";
  16406. +      else
  16407. +    return \"mr %0,%1\;mr %L0,%L1\";
  16408. +    case 1:
  16409. +      /* If the low-address word is used in the address, we must load it
  16410. +     last.  Otherwise, load it first.  Note that we cannot have
  16411. +     auto-increment in that case since the address register is known to be
  16412. +     dead.  */
  16413. +      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  16414. +                 operands [1], 0))
  16415. +    return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
  16416. +      else
  16417. +    return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
  16418. +    case 2:
  16419. +      return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
  16420. +    case 3:
  16421. +    case 4:
  16422. +    case 5:
  16423. +      return \"#\";
  16424. +    }
  16425. +}"
  16426. +  [(set_attr "type" "*,load,store,*,*,*")
  16427. +   (set_attr "length" "8,8,8,8,12,16")])
  16428. +
  16429. +(define_insn "*movdf_hardfloat64"
  16430. +  [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,!r,!r,!r,f,f,m")
  16431. +    (match_operand:DF 1 "input_operand" "r,m,r,G,H,F,f,m,f"))]
  16432. +  "TARGET_POWERPC64 && TARGET_HARD_FLOAT
  16433. +   && (gpc_reg_operand (operands[0], DFmode)
  16434. +       || gpc_reg_operand (operands[1], DFmode))"
  16435. +  "@
  16436. +   mr %0,%1
  16437. +   ld%U1%X1 %0,%1
  16438. +   std%U0%X0 %1,%0
  16439. +   #
  16440. +   #
  16441. +   #
  16442. +   fmr %0,%1
  16443. +   lfd%U1%X1 %0,%1
  16444. +   stfd%U0%X0 %1,%0"
  16445. +  [(set_attr "type" "*,load,store,*,*,*,fp,fpload,fpstore")
  16446. +   (set_attr "length" "4,4,4,8,12,16,4,4,4")])
  16447. +
  16448. +(define_insn "*movdf_softfloat64"
  16449. +  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
  16450. +    (match_operand:DF 1 "input_operand" "r,m,r,G,H,F"))]
  16451. +  "TARGET_POWERPC64 && TARGET_SOFT_FLOAT
  16452. +   && (gpc_reg_operand (operands[0], DFmode)
  16453. +       || gpc_reg_operand (operands[1], DFmode))"
  16454. +  "@
  16455. +   mr %0,%1
  16456. +   ld%U1%X1 %0,%1
  16457. +   std%U0%X0 %1,%0
  16458. +   #
  16459. +   #
  16460. +   #"
  16461. +  [(set_attr "type" "*,load,store,*,*,*")
  16462. +   (set_attr "length" "*,*,*,8,12,16")])
  16463. +
  16464. +;; Next come the multi-word integer load and store and the load and store
  16465. +;; multiple insns.
  16466. +(define_expand "movdi"
  16467. +  [(set (match_operand:DI 0 "general_operand" "")
  16468. +    (match_operand:DI 1 "any_operand" ""))]
  16469. +  ""
  16470. +  "
  16471. +{
  16472. +  if (GET_CODE (operands[0]) != REG)
  16473. +    operands[1] = force_reg (DImode, operands[1]);
  16474. +
  16475. +  /* Convert a move of a CONST_DOUBLE into a CONST_INT
  16476. +     only if sign-extended lower-half for 32-bit host.  */
  16477. +  if (GET_CODE (operands[1]) == CONST_DOUBLE
  16478. +#if HOST_BITS_PER_WIDE_INT == 32
  16479. +      && ((CONST_DOUBLE_HIGH (operands[1]) == 0
  16480. +       && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) == 0)
  16481. +      || (CONST_DOUBLE_HIGH (operands[1]) == (HOST_WIDE_INT) 0xffffffff
  16482. +          && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) != 0))
  16483. +#endif
  16484. +     )
  16485. +    operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
  16486. +
  16487. +  /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary.  */
  16488. +  if (GET_CODE (operands[1]) == CONSTANT_P_RTX)
  16489. +    {
  16490. +      emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
  16491. +      DONE;
  16492. +    }
  16493. +
  16494. +  if (TARGET_64BIT
  16495. +      && CONSTANT_P (operands[1])
  16496. +#if HOST_BITS_PER_WIDE_INT == 32
  16497. +      && GET_CODE (operands[1]) != CONST_INT
  16498. +#endif
  16499. +      && ! easy_fp_constant (operands[1], DImode)
  16500. +      && ! LEGITIMATE_CONSTANT_POOL_ADDRESS_P (operands[1]))
  16501. +    {
  16502. +      /* Emit a USE operation so that the constant isn't deleted if
  16503. +     expensive optimizations are turned on because nobody
  16504. +     references it.  This should only be done for operands that
  16505. +     contain SYMBOL_REFs with CONSTANT_POOL_ADDRESS_P set.
  16506. +     This should not be done for operands that contain LABEL_REFs.
  16507. +     For now, we just handle the obvious case.  */
  16508. +      if (GET_CODE (operands[1]) != LABEL_REF)
  16509. +    emit_insn (gen_rtx_USE (VOIDmode, operands[1]));
  16510. +
  16511. +      /* If we are to limit the number of things we put in the TOC and
  16512. +     this is a symbol plus a constant we can add in one insn,
  16513. +     just put the symbol in the TOC and add the constant.  Don't do
  16514. +     this if reload is in progress.  */
  16515. +      if (GET_CODE (operands[1]) == CONST
  16516. +      && TARGET_NO_SUM_IN_TOC && ! reload_in_progress
  16517. +      && GET_CODE (XEXP (operands[1], 0)) == PLUS
  16518. +      && add_operand (XEXP (XEXP (operands[1], 0), 1), DImode)
  16519. +      && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
  16520. +          || GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == SYMBOL_REF)
  16521. +      && ! side_effects_p (operands[0]))
  16522. +    {
  16523. +      rtx sym = force_const_mem (DImode, XEXP (XEXP (operands[1], 0), 0));
  16524. +      rtx other = XEXP (XEXP (operands[1], 0), 1);
  16525. +
  16526. +      emit_insn (gen_adddi3 (operands[0], force_reg (DImode, sym), other));
  16527. +      DONE;
  16528. +    }
  16529. +
  16530. +      operands[1] = force_const_mem (DImode, operands[1]);
  16531. +      if (! memory_address_p (DImode, XEXP (operands[1], 0))
  16532. +      && ! reload_in_progress)
  16533. +    operands[1] = change_address (operands[1], DImode,
  16534. +                      XEXP (operands[1], 0));
  16535. +    }
  16536. +}")
  16537. +
  16538. +(define_insn "*movdi_32"
  16539. +  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,f,f,m,r,r,r,r,r")
  16540. +    (match_operand:DI 1 "input_operand" "r,m,r,f,m,f,IJK,n,G,H,F"))]
  16541. +  "! TARGET_POWERPC64
  16542. +   && (gpc_reg_operand (operands[0], DImode)
  16543. +       || gpc_reg_operand (operands[1], DImode))"
  16544. +  "*
  16545. +{
  16546. +  switch (which_alternative)
  16547. +    {
  16548. +    default:
  16549. +      abort ();
  16550. +    case 0:
  16551. +      /* We normally copy the low-numbered register first.  However, if
  16552. +     the first register operand 0 is the same as the second register of
  16553. +     operand 1, we must copy in the opposite order.  */
  16554. +      if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
  16555. +    return \"mr %L0,%L1\;mr %0,%1\";
  16556. +      else
  16557. +    return \"mr %0,%1\;mr %L0,%L1\";
  16558. +    case 1:
  16559. +      /* If the low-address word is used in the address, we must load it
  16560. +     last.  Otherwise, load it first.  Note that we cannot have
  16561. +     auto-increment in that case since the address register is known to be
  16562. +     dead.  */
  16563. +      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  16564. +                 operands [1], 0))
  16565. +    return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
  16566. +      else
  16567. +    return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
  16568. +    case 2:
  16569. +      return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
  16570. +    case 3:
  16571. +      return \"fmr %0,%1\";
  16572. +    case 4:
  16573. +      return \"lfd%U1%X1 %0,%1\";
  16574. +    case 5:
  16575. +      return \"stfd%U0%X0 %1,%0\";
  16576. +    case 6:
  16577. +    case 7:
  16578. +    case 8:
  16579. +    case 9:
  16580. +    case 10:
  16581. +      return \"#\";
  16582. +    }
  16583. +}"
  16584. +  [(set_attr "type" "*,load,store,fp,fpload,fpstore,*,*,*,*,*")
  16585. +   (set_attr "length" "8,8,8,*,*,*,8,12,8,12,16")])
  16586. +
  16587. +(define_split
  16588. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16589. +    (match_operand:DI 1 "const_int_operand" ""))]
  16590. +  "! TARGET_POWERPC64 && reload_completed"
  16591. +  [(set (match_dup 2) (match_dup 4))
  16592. +   (set (match_dup 3) (match_dup 1))]
  16593. +  "
  16594. +{
  16595. +  HOST_WIDE_INT value = INTVAL (operands[1]);
  16596. +  operands[2] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN == 0);
  16597. +  operands[3] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN != 0);
  16598. +#if HOST_BITS_PER_WIDE_INT == 32
  16599. +  operands[4] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
  16600. +#else
  16601. +  operands[4] = GEN_INT (value >> 32);
  16602. +  operands[1] = GEN_INT ((value & 0x7fffffff) - (value & 0x80000000));
  16603. +#endif
  16604. +}")
  16605. +
  16606. +(define_split
  16607. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16608. +    (match_operand:DI 1 "const_double_operand" ""))]
  16609. +  "HOST_BITS_PER_WIDE_INT == 32 && ! TARGET_POWERPC64 && reload_completed"
  16610. +  [(set (match_dup 2) (match_dup 4))
  16611. +   (set (match_dup 3) (match_dup 5))]
  16612. +  "
  16613. +{
  16614. +  operands[2] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN == 0);
  16615. +  operands[3] = gen_rtx_SUBREG (SImode, operands[0], WORDS_BIG_ENDIAN != 0);
  16616. +  operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
  16617. +  operands[5] = GEN_INT (CONST_DOUBLE_LOW  (operands[1]));
  16618. +}")
  16619. +
  16620. +(define_insn "*movdi_64"
  16621. +  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,f,f,m,r,*h,*h")
  16622. +    (match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))]
  16623. +  "TARGET_POWERPC64
  16624. +   && (gpc_reg_operand (operands[0], DImode)
  16625. +       || gpc_reg_operand (operands[1], DImode))"
  16626. +  "@
  16627. +   mr %0,%1
  16628. +   ld%U1%X1 %0,%1
  16629. +   std%U0%X0 %1,%0
  16630. +   li %0,%1
  16631. +   lis %0,%v1
  16632. +   #
  16633. +   {cal|la} %0,%1(%*)
  16634. +   fmr %0,%1
  16635. +   lfd%U1%X1 %0,%1
  16636. +   stfd%U0%X0 %1,%0
  16637. +   mf%1 %0
  16638. +   mt%0 %1
  16639. +   cror 0,0,0"
  16640. +  [(set_attr "type" "*,load,store,*,*,*,*,fp,fpload,fpstore,*,mtjmpr,*")
  16641. +   (set_attr "length" "4,4,4,4,4,20,4,4,4,4,4,4,4")])
  16642. +
  16643. +(define_insn ""
  16644. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  16645. +    (match_operand:DI 1 "const_double_operand" "F"))]
  16646. +  "TARGET_POWERPC64 && GET_CODE (operands[1]) == CONST_DOUBLE
  16647. +   && num_insns_constant (operands[1], DImode) == 1"
  16648. +  "*
  16649. +{
  16650. +  return ((unsigned HOST_WIDE_INT)
  16651. +      (CONST_DOUBLE_LOW (operands[1]) + 0x8000) < 0x10000)
  16652. +     ? \"li %0,%1\" : \"lis %0,%v1\";
  16653. +}")
  16654. +
  16655. +(define_split
  16656. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16657. +    (match_operand:DI 1 "const_int_operand" ""))]
  16658. +  "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
  16659. +   && num_insns_constant (operands[1], DImode) > 1"
  16660. +  [(set (match_dup 0)
  16661. +    (match_dup 2))
  16662. +   (set (match_dup 0)
  16663. +    (ior:DI (match_dup 0)
  16664. +        (match_dup 3)))]
  16665. +  "
  16666. +{
  16667. +  operands[2] = GEN_INT (INTVAL (operands[1]) & 0xffff0000);
  16668. +  operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff);
  16669. +}")
  16670. +
  16671. +(define_split
  16672. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16673. +    (match_operand:DI 1 "const_double_operand" ""))]
  16674. +  "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
  16675. +   && GET_CODE (operands[1]) == CONST_DOUBLE
  16676. +   && ((CONST_DOUBLE_HIGH (operands[1]) == 0
  16677. +        && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) == 0)
  16678. +       || (CONST_DOUBLE_HIGH (operands[1]) == (HOST_WIDE_INT) 0xffffffff
  16679. +           && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) != 0))"
  16680. +  [(set (match_dup 0)
  16681. +    (match_dup 2))
  16682. +   (set (match_dup 0)
  16683. +    (ior:DI (match_dup 0)
  16684. +        (match_dup 3)))]
  16685. +  "
  16686. +{
  16687. +  operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[1]) & 0xffff0000);
  16688. +  operands[3] = GEN_INT (CONST_DOUBLE_LOW (operands[1]) & 0xffff);
  16689. +}")
  16690. +
  16691. +(define_split
  16692. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16693. +    (match_operand:DI 1 "const_double_operand" ""))]
  16694. +  "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
  16695. +   && GET_CODE (operands[1]) == CONST_DOUBLE
  16696. +   && CONST_DOUBLE_HIGH (operands[1]) == 0
  16697. +   && (CONST_DOUBLE_LOW (operands[1]) & 0x80000000) != 0"
  16698. +  [(set (match_dup 0)
  16699. +    (match_dup 2))
  16700. +   (set (match_dup 0)
  16701. +    (zero_extend:DI (match_dup 3)))]
  16702. +  "
  16703. +{ 
  16704. +  operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[1])); 
  16705. +  operands[3] = gen_lowpart_common (SImode, operands[0]);
  16706. +}")
  16707. +
  16708. +(define_split
  16709. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16710. +    (match_operand:DI 1 "const_double_operand" ""))]
  16711. +  "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
  16712. +   && GET_CODE (operands[1]) == CONST_DOUBLE
  16713. +   && CONST_DOUBLE_LOW (operands[1]) == 0"
  16714. +  [(set (match_dup 0)
  16715. +    (match_dup 2))
  16716. +   (set (match_dup 0)
  16717. +    (ashift:DI (match_dup 0)
  16718. +           (const_int 32)))]
  16719. +  "
  16720. +{ operands[2] = GEN_INT (CONST_DOUBLE_HIGH (operands[1])); }")
  16721. +
  16722. +;; Generate all one-bits and clear left or right.
  16723. +;; Use (and:DI (rotate:DI ...)) to avoid anddi3 unnecessary clobber.
  16724. +(define_split
  16725. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16726. +    (match_operand:DI 1 "mask64_operand" ""))]
  16727. +  "TARGET_POWERPC64 && num_insns_constant (operands[1], DImode) > 1"
  16728. +  [(set (match_dup 0) (const_int -1))
  16729. +   (set (match_dup 0)
  16730. +    (and:DI (rotate:DI (match_dup 0)
  16731. +               (const_int 0))
  16732. +        (match_dup 1)))]
  16733. +  "")
  16734. +
  16735. +;; Split a load of a large constant into the appropriate five-instruction
  16736. +;; sequence.  Handle anything in a constant number of insns.
  16737. +;; When non-easy constants can go in the TOC, this should use
  16738. +;; easy_fp_constant predicate.
  16739. +(define_split
  16740. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16741. +    (match_operand:DI 1 "const_double_operand" ""))]
  16742. +  "HOST_BITS_PER_WIDE_INT == 32 && TARGET_POWERPC64
  16743. +   && num_insns_constant (operands[1], DImode) > 1"
  16744. +  [(set (match_dup 0)
  16745. +    (match_dup 2))
  16746. +   (set (match_dup 0)
  16747. +    (ashift:DI (match_dup 0)
  16748. +           (const_int 32)))
  16749. +   (set (match_dup 0)
  16750. +    (ior:DI (match_dup 0)
  16751. +        (match_dup 3)))]
  16752. +  "
  16753. +{
  16754. +  if (GET_CODE (operands[1]) == CONST_DOUBLE)
  16755. +    {
  16756. +      operands[2] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
  16757. +      operands[3] = immed_double_const (CONST_DOUBLE_LOW (operands[1]),
  16758. +                    0, DImode);
  16759. +    }
  16760. +  else
  16761. +    {
  16762. +      HOST_WIDE_INT value = INTVAL (operands[1]);
  16763. +      operands[2] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
  16764. +      operands[3] = immed_double_const (value, 0, DImode);
  16765. +    }
  16766. +}")
  16767. +
  16768. +(define_split
  16769. +  [(set (match_operand:DI 0 "gpc_reg_operand" "")
  16770. +    (match_operand:DI 1 "const_int_operand" ""))]
  16771. +  "HOST_BITS_PER_WIDE_INT != 32 && TARGET_POWERPC64
  16772. +   && num_insns_constant (operands[1], DImode) > 1"
  16773. +  [(set (match_dup 0)
  16774. +    (match_dup 2))
  16775. +   (set (match_dup 0)
  16776. +    (ashift:DI (match_dup 0)
  16777. +           (const_int 32)))
  16778. +   (set (match_dup 0)
  16779. +    (ior:DI (match_dup 0)
  16780. +        (match_dup 3)))]
  16781. +  "
  16782. +{
  16783. +#if HOST_BITS_PER_WIDE_INT != 32
  16784. +  HOST_WIDE_INT value = INTVAL (operands[1]);
  16785. +  operands[2] = GEN_INT (value >> 32);
  16786. +  operands[3] = GEN_INT ((value & 0x7fffffff) - (value & 0x80000000));
  16787. +#endif
  16788. +}")
  16789. +
  16790. +(define_insn ""
  16791. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  16792. +    (compare:CC (match_operand:DI 1 "gpc_reg_operand" "r")
  16793. +            (const_int 0)))
  16794. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r") (match_dup 1))]
  16795. +  "TARGET_POWERPC64"
  16796. +  "mr. %0,%1"
  16797. +  [(set_attr "type" "compare")])
  16798. +
  16799. +;; TImode is similar, except that we usually want to compute the address into
  16800. +;; a register and use lsi/stsi (the exception is during reload).  MQ is also
  16801. +;; clobbered in stsi for POWER, so we need a SCRATCH for it.
  16802. +(define_expand "movti"
  16803. +  [(parallel [(set (match_operand:TI 0 "general_operand" "")
  16804. +           (match_operand:TI 1 "general_operand" ""))
  16805. +          (clobber (scratch:SI))])]
  16806. +  "TARGET_STRING || TARGET_POWERPC64"
  16807. +  "
  16808. +{
  16809. +  if (GET_CODE (operands[0]) == MEM)
  16810. +    operands[1] = force_reg (TImode, operands[1]);
  16811. +
  16812. +  if (GET_CODE (operands[0]) == MEM
  16813. +      && GET_CODE (XEXP (operands[0], 0)) != REG
  16814. +      && ! reload_in_progress)
  16815. +    operands[0] = change_address (operands[0], TImode,
  16816. +                  copy_addr_to_reg (XEXP (operands[0], 0)));
  16817. +
  16818. +  if (GET_CODE (operands[1]) == MEM
  16819. +      && GET_CODE (XEXP (operands[1], 0)) != REG
  16820. +      && ! reload_in_progress)
  16821. +    operands[1] = change_address (operands[1], TImode,
  16822. +                  copy_addr_to_reg (XEXP (operands[1], 0)));
  16823. +}")
  16824. +
  16825. +;; We say that MQ is clobbered in the last alternative because the first
  16826. +;; alternative would never get used otherwise since it would need a reload
  16827. +;; while the 2nd alternative would not.  We put memory cases first so they
  16828. +;; are preferred.  Otherwise, we'd try to reload the output instead of
  16829. +;; giving the SCRATCH mq.
  16830. +(define_insn "*movti_power"
  16831. +  [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,????r,????r,????r")
  16832. +    (match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m"))
  16833. +   (clobber (match_scratch:SI 2 "=q,q#X,X,X,X"))]
  16834. +  "TARGET_STRING && TARGET_POWER && ! TARGET_POWERPC64
  16835. +   && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
  16836. +  "*
  16837. +{
  16838. +  switch (which_alternative)
  16839. +    {
  16840. +    default:
  16841. +      abort ();
  16842. +
  16843. +    case 0:
  16844. +      return \"{stsi|stswi} %1,%P0,16\";
  16845. +
  16846. +    case 1:
  16847. +      return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\;{st|stw} %Y1,%Y0\;{st|stw} %Z1,%Z0\";
  16848. +
  16849. +    case 2:
  16850. +      /* Normally copy registers with lowest numbered register copied first.
  16851. +     But copy in the other order if the first register of the output
  16852. +     is the second, third, or fourth register in the input.  */
  16853. +      if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
  16854. +      && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
  16855. +    return \"mr %Z0,%Z1\;mr %Y0,%Y1\;mr %L0,%L1\;mr %0,%1\";
  16856. +      else
  16857. +    return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
  16858. +    case 3:
  16859. +      /* If the address is not used in the output, we can use lsi.  Otherwise,
  16860. +     fall through to generating four loads.  */
  16861. +      if (! reg_overlap_mentioned_p (operands[0], operands[1]))
  16862. +    return \"{lsi|lswi} %0,%P1,16\";
  16863. +      /* ... fall through ... */
  16864. +    case 4:
  16865. +      /* If the address register is the same as the register for the lowest-
  16866. +     addressed word, load it last.  Similarly for the next two words.
  16867. +     Otherwise load lowest address to highest.  */
  16868. +      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  16869. +                 operands[1], 0))
  16870. +    return \"{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %0,%1\";
  16871. +      else if (refers_to_regno_p (REGNO (operands[0]) + 1,
  16872. +                  REGNO (operands[0]) + 2, operands[1], 0))
  16873. +    return \"{l|lwz} %0,%1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %L0,%L1\";
  16874. +      else if (refers_to_regno_p (REGNO (operands[0]) + 2,
  16875. +                  REGNO (operands[0]) + 3, operands[1], 0))
  16876. +    return \"{l|lwz} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Z0,%Z1\;{l|lwz} %Y0,%Y1\";
  16877. +      else
  16878. +    return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\";
  16879. +    }
  16880. +}"
  16881. +  [(set_attr "type" "store,store,*,load,load")
  16882. +   (set_attr "length" "*,16,16,*,16")])
  16883. +
  16884. +(define_insn "*movti_string"
  16885. +  [(set (match_operand:TI 0 "reg_or_mem_operand" "=m,????r,????r")
  16886. +    (match_operand:TI 1 "reg_or_mem_operand" "r,r,m"))
  16887. +   (clobber (match_scratch:SI 2 "=X,X,X"))]
  16888. +  "TARGET_STRING && ! TARGET_POWER && ! TARGET_POWERPC64
  16889. +   && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
  16890. +  "*
  16891. +{
  16892. +  switch (which_alternative)
  16893. +    {
  16894. +    default:
  16895. +      abort ();
  16896. +
  16897. +    case 0:
  16898. +      return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\;{st|stw} %Y1,%Y0\;{st|stw} %Z1,%Z0\";
  16899. +
  16900. +    case 1:
  16901. +      /* Normally copy registers with lowest numbered register copied first.
  16902. +     But copy in the other order if the first register of the output
  16903. +     is the second, third, or fourth register in the input.  */
  16904. +      if (REGNO (operands[0]) >= REGNO (operands[1]) + 1
  16905. +      && REGNO (operands[0]) <= REGNO (operands[1]) + 3)
  16906. +    return \"mr %Z0,%Z1\;mr %Y0,%Y1\;mr %L0,%L1\;mr %0,%1\";
  16907. +      else
  16908. +    return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
  16909. +    case 2:
  16910. +      /* If the address register is the same as the register for the lowest-
  16911. +     addressed word, load it last.  Similarly for the next two words.
  16912. +     Otherwise load lowest address to highest.  */
  16913. +      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  16914. +                 operands[1], 0))
  16915. +    return \"{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %0,%1\";
  16916. +      else if (refers_to_regno_p (REGNO (operands[0]) + 1,
  16917. +                  REGNO (operands[0]) + 2, operands[1], 0))
  16918. +    return \"{l|lwz} %0,%1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\;{l|lwz} %L0,%L1\";
  16919. +      else if (refers_to_regno_p (REGNO (operands[0]) + 2,
  16920. +                  REGNO (operands[0]) + 3, operands[1], 0))
  16921. +    return \"{l|lwz} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Z0,%Z1\;{l|lwz} %Y0,%Y1\";
  16922. +      else
  16923. +    return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\;{l|lwz} %Y0,%Y1\;{l|lwz} %Z0,%Z1\";
  16924. +    }
  16925. +}"
  16926. +  [(set_attr "type" "store,*,load")
  16927. +   (set_attr "length" "16,16,16")])
  16928. +
  16929. +(define_insn "*movti_ppc64"
  16930. +  [(set (match_operand:TI 0 "nonimmediate_operand" "=r,r,m")
  16931. +    (match_operand:TI 1 "input_operand" "r,m,r"))]
  16932. +  "TARGET_POWERPC64 && (gpc_reg_operand (operands[0], TImode)
  16933. +   || gpc_reg_operand (operands[1], TImode))"
  16934. +  "*
  16935. +{
  16936. +  switch (which_alternative)
  16937. +    {
  16938. +    default:
  16939. +      abort ();
  16940. +    case 0:
  16941. +      /* We normally copy the low-numbered register first.  However, if
  16942. +     the first register operand 0 is the same as the second register of
  16943. +     operand 1, we must copy in the opposite order.  */
  16944. +      if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
  16945. +    return \"mr %L0,%L1\;mr %0,%1\";
  16946. +      else
  16947. +    return \"mr %0,%1\;mr %L0,%L1\";
  16948. +    case 1:
  16949. +      /* If the low-address word is used in the address, we must load it
  16950. +     last.  Otherwise, load it first.  Note that we cannot have
  16951. +     auto-increment in that case since the address register is known to be
  16952. +     dead.  */
  16953. +      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  16954. +                 operands [1], 0))
  16955. +    return \"ld %L0,%L1\;ld %0,%1\";
  16956. +      else
  16957. +    return \"ld%U1 %0,%1\;ld %L0,%L1\";
  16958. +    case 2:
  16959. +      return \"std%U0 %1,%0\;std %L1,%L0\";
  16960. +    }
  16961. +}"
  16962. +  [(set_attr "type" "*,load,store")
  16963. +   (set_attr "length" "8,8,8")])
  16964. +
  16965. +(define_expand "load_multiple"
  16966. +  [(match_par_dup 3 [(set (match_operand:SI 0 "" "")
  16967. +              (match_operand:SI 1 "" ""))
  16968. +             (use (match_operand:SI 2 "" ""))])]
  16969. +  "TARGET_STRING"
  16970. +  "
  16971. +{
  16972. +  int regno;
  16973. +  int count;
  16974. +  rtx from;
  16975. +  int i;
  16976. +
  16977. +  /* Support only loading a constant number of fixed-point registers from
  16978. +     memory and only bother with this if more than two; the machine
  16979. +     doesn't support more than eight.  */
  16980. +  if (GET_CODE (operands[2]) != CONST_INT
  16981. +      || INTVAL (operands[2]) <= 2
  16982. +      || INTVAL (operands[2]) > 8
  16983. +      || GET_CODE (operands[1]) != MEM
  16984. +      || GET_CODE (operands[0]) != REG
  16985. +      || REGNO (operands[0]) >= 32)
  16986. +    FAIL;
  16987. +
  16988. +  count = INTVAL (operands[2]);
  16989. +  regno = REGNO (operands[0]);
  16990. +
  16991. +  operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
  16992. +  from = force_reg (SImode, XEXP (operands[1], 0));
  16993. +
  16994. +  for (i = 0; i < count; i++)
  16995. +    XVECEXP (operands[3], 0, i)
  16996. +      = gen_rtx_SET (VOIDmode, gen_rtx_REG (SImode, regno + i),
  16997. +         change_address (operands[1], SImode,
  16998. +                 plus_constant (from, i * 4)));
  16999. +}")
  17000. +
  17001. +(define_insn ""
  17002. +  [(match_parallel 0 "load_multiple_operation"
  17003. +           [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
  17004. +             (mem:SI (match_operand:SI 2 "gpc_reg_operand" "b")))])]
  17005. +  "TARGET_STRING"
  17006. +  "*
  17007. +{
  17008. +  /* We have to handle the case where the pseudo used to contain the address
  17009. +     is assigned to one of the output registers.  */
  17010. +  int i, j;
  17011. +  int words = XVECLEN (operands[0], 0);
  17012. +  rtx xop[10];
  17013. +
  17014. +  if (XVECLEN (operands[0], 0) == 1)
  17015. +    return \"{l|lwz} %1,0(%2)\";
  17016. +
  17017. +  for (i = 0; i < words; i++)
  17018. +    if (refers_to_regno_p (REGNO (operands[1]) + i,
  17019. +               REGNO (operands[1]) + i + 1, operands[2], 0))
  17020. +      {
  17021. +    if (i == words-1)
  17022. +      {
  17023. +        xop[0] = operands[1];
  17024. +        xop[1] = operands[2];
  17025. +        xop[2] = GEN_INT (4 * (words-1));
  17026. +        output_asm_insn (\"{lsi|lswi} %0,%1,%2\;{l|lwz} %1,%2(%1)\", xop);
  17027. +        return \"\";
  17028. +      }
  17029. +    else if (i == 0)
  17030. +      {
  17031. +        xop[0] = operands[1];
  17032. +        xop[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
  17033. +        xop[2] = GEN_INT (4 * (words-1));
  17034. +        output_asm_insn (\"{cal %0,4(%0)|addi %0,%0,4}\;{lsi|lswi} %1,%0,%2\;{l|lwz} %0,-4(%0)\", xop);
  17035. +        return \"\";
  17036. +      }
  17037. +    else
  17038. +      {
  17039. +        for (j = 0; j < words; j++)
  17040. +          if (j != i)
  17041. +        {
  17042. +          xop[0] = gen_rtx_REG (SImode, REGNO (operands[1]) + j);
  17043. +          xop[1] = operands[2];
  17044. +          xop[2] = GEN_INT (j * 4);
  17045. +          output_asm_insn (\"{l|lwz} %0,%2(%1)\", xop);
  17046. +        }
  17047. +        xop[0] = operands[2];
  17048. +        xop[1] = GEN_INT (i * 4);
  17049. +        output_asm_insn (\"{l|lwz} %0,%1(%0)\", xop);
  17050. +        return \"\";
  17051. +      }
  17052. +      }
  17053. +
  17054. +  return \"{lsi|lswi} %1,%2,%N0\";
  17055. +}"
  17056. +  [(set_attr "type" "load")
  17057. +   (set_attr "length" "32")])
  17058. +
  17059. +
  17060. +(define_expand "store_multiple"
  17061. +  [(match_par_dup 3 [(set (match_operand:SI 0 "" "")
  17062. +              (match_operand:SI 1 "" ""))
  17063. +             (clobber (scratch:SI))
  17064. +             (use (match_operand:SI 2 "" ""))])]
  17065. +  "TARGET_STRING"
  17066. +  "
  17067. +{
  17068. +  int regno;
  17069. +  int count;
  17070. +  rtx to;
  17071. +  int i;
  17072. +
  17073. +  /* Support only storing a constant number of fixed-point registers to
  17074. +     memory and only bother with this if more than two; the machine
  17075. +     doesn't support more than eight.  */
  17076. +  if (GET_CODE (operands[2]) != CONST_INT
  17077. +      || INTVAL (operands[2]) <= 2
  17078. +      || INTVAL (operands[2]) > 8
  17079. +      || GET_CODE (operands[0]) != MEM
  17080. +      || GET_CODE (operands[1]) != REG
  17081. +      || REGNO (operands[1]) >= 32)
  17082. +    FAIL;
  17083. +
  17084. +  count = INTVAL (operands[2]);
  17085. +  regno = REGNO (operands[1]);
  17086. +
  17087. +  operands[3] = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count + 1));
  17088. +  to = force_reg (SImode, XEXP (operands[0], 0));
  17089. +
  17090. +  XVECEXP (operands[3], 0, 0)
  17091. +    = gen_rtx_SET (VOIDmode, change_address (operands[0], SImode, to),
  17092. +           operands[1]);
  17093. +  XVECEXP (operands[3], 0, 1) = gen_rtx_CLOBBER (VOIDmode,
  17094. +                          gen_rtx_SCRATCH (SImode));
  17095. +
  17096. +  for (i = 1; i < count; i++)
  17097. +    XVECEXP (operands[3], 0, i + 1)
  17098. +      = gen_rtx_SET (VOIDmode,
  17099. +         change_address (operands[0], SImode,
  17100. +                 plus_constant (to, i * 4)),
  17101. +         gen_rtx_REG (SImode, regno + i));
  17102. +}")
  17103. +
  17104. +(define_insn ""
  17105. +  [(match_parallel 0 "store_multiple_operation"
  17106. +           [(set (match_operand:SI 1 "indirect_operand" "=Q")
  17107. +             (match_operand:SI 2 "gpc_reg_operand" "r"))
  17108. +            (clobber (match_scratch:SI 3 "=q"))])]
  17109. +  "TARGET_STRING && TARGET_POWER"
  17110. +  "{stsi|stswi} %2,%P1,%O0"
  17111. +  [(set_attr "type" "store")])
  17112. +
  17113. +(define_insn ""
  17114. +  [(match_parallel 0 "store_multiple_operation"
  17115. +           [(set (mem:SI (match_operand:SI 1 "gpc_reg_operand" "b"))
  17116. +             (match_operand:SI 2 "gpc_reg_operand" "r"))
  17117. +            (clobber (match_scratch:SI 3 "X"))])]
  17118. +  "TARGET_STRING && ! TARGET_POWER"
  17119. +  "{stsi|stswi} %2,%1,%O0"
  17120. +  [(set_attr "type" "store")])
  17121. +
  17122. +
  17123. +;; String/block move insn.
  17124. +;; Argument 0 is the destination
  17125. +;; Argument 1 is the source
  17126. +;; Argument 2 is the length
  17127. +;; Argument 3 is the alignment
  17128. +
  17129. +(define_expand "movstrsi"
  17130. +  [(parallel [(set (match_operand:BLK 0 "" "")
  17131. +           (match_operand:BLK 1 "" ""))
  17132. +          (use (match_operand:SI 2 "" ""))
  17133. +          (use (match_operand:SI 3 "" ""))])]
  17134. +  ""
  17135. +  "
  17136. +{
  17137. +  if (expand_block_move (operands))
  17138. +    DONE;
  17139. +  else
  17140. +    FAIL;
  17141. +}")
  17142. +
  17143. +;; Move up to 32 bytes at a time.  The fixed registers are needed because the
  17144. +;; register allocator doesn't have a clue about allocating 8 word registers
  17145. +(define_expand "movstrsi_8reg"
  17146. +  [(parallel [(set (match_operand 0 "" "")
  17147. +           (match_operand 1 "" ""))
  17148. +          (use (match_operand 2 "" ""))
  17149. +          (use (match_operand 3 "" ""))
  17150. +          (clobber (reg:SI  5))
  17151. +          (clobber (reg:SI  6))
  17152. +          (clobber (reg:SI  7))
  17153. +          (clobber (reg:SI  8))
  17154. +          (clobber (reg:SI  9))
  17155. +          (clobber (reg:SI 10))
  17156. +          (clobber (reg:SI 11))
  17157. +          (clobber (reg:SI 12))
  17158. +          (clobber (match_scratch:SI 4 ""))])]
  17159. +  "TARGET_STRING"
  17160. +  "")
  17161. +
  17162. +(define_insn ""
  17163. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17164. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17165. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17166. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17167. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  17168. +   (clobber (reg:SI  6))
  17169. +   (clobber (reg:SI  7))
  17170. +   (clobber (reg:SI  8))
  17171. +   (clobber (reg:SI  9))
  17172. +   (clobber (reg:SI 10))
  17173. +   (clobber (reg:SI 11))
  17174. +   (clobber (reg:SI 12))
  17175. +   (clobber (match_scratch:SI 5 "=q"))]
  17176. +  "TARGET_STRING && TARGET_POWER
  17177. +   && ((INTVAL (operands[2]) > 24 && INTVAL (operands[2]) < 32) || INTVAL (operands[2]) == 0)
  17178. +   && (REGNO (operands[0]) < 5 || REGNO (operands[0]) > 12)
  17179. +   && (REGNO (operands[1]) < 5 || REGNO (operands[1]) > 12)
  17180. +   && REGNO (operands[4]) == 5"
  17181. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17182. +  [(set_attr "type" "load")
  17183. +   (set_attr "length" "8")])
  17184. +
  17185. +(define_insn ""
  17186. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17187. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17188. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17189. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17190. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  17191. +   (clobber (reg:SI  6))
  17192. +   (clobber (reg:SI  7))
  17193. +   (clobber (reg:SI  8))
  17194. +   (clobber (reg:SI  9))
  17195. +   (clobber (reg:SI 10))
  17196. +   (clobber (reg:SI 11))
  17197. +   (clobber (reg:SI 12))
  17198. +   (clobber (match_scratch:SI 5 "X"))]
  17199. +  "TARGET_STRING && ! TARGET_POWER
  17200. +   && ((INTVAL (operands[2]) > 24 && INTVAL (operands[2]) < 32) || INTVAL (operands[2]) == 0)
  17201. +   && (REGNO (operands[0]) < 5 || REGNO (operands[0]) > 12)
  17202. +   && (REGNO (operands[1]) < 5 || REGNO (operands[1]) > 12)
  17203. +   && REGNO (operands[4]) == 5"
  17204. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17205. +  [(set_attr "type" "load")
  17206. +   (set_attr "length" "8")])
  17207. +
  17208. +;; Move up to 24 bytes at a time.  The fixed registers are needed because the
  17209. +;; register allocator doesn't have a clue about allocating 6 word registers
  17210. +(define_expand "movstrsi_6reg"
  17211. +  [(parallel [(set (match_operand 0 "" "")
  17212. +           (match_operand 1 "" ""))
  17213. +          (use (match_operand 2 "" ""))
  17214. +          (use (match_operand 3 "" ""))
  17215. +          (clobber (reg:SI  7))
  17216. +          (clobber (reg:SI  8))
  17217. +          (clobber (reg:SI  9))
  17218. +          (clobber (reg:SI 10))
  17219. +          (clobber (reg:SI 11))
  17220. +          (clobber (reg:SI 12))
  17221. +          (clobber (match_scratch:SI 4 ""))])]
  17222. +  "TARGET_STRING"
  17223. +  "")
  17224. +
  17225. +(define_insn ""
  17226. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17227. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17228. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17229. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17230. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  17231. +   (clobber (reg:SI  8))
  17232. +   (clobber (reg:SI  9))
  17233. +   (clobber (reg:SI 10))
  17234. +   (clobber (reg:SI 11))
  17235. +   (clobber (reg:SI 12))
  17236. +   (clobber (match_scratch:SI 5 "=q"))]
  17237. +  "TARGET_STRING && TARGET_POWER
  17238. +   && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24
  17239. +   && (REGNO (operands[0]) < 7 || REGNO (operands[0]) > 12)
  17240. +   && (REGNO (operands[1]) < 7 || REGNO (operands[1]) > 12)
  17241. +   && REGNO (operands[4]) == 7"
  17242. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17243. +  [(set_attr "type" "load")
  17244. +   (set_attr "length" "8")])
  17245. +
  17246. +(define_insn ""
  17247. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17248. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17249. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17250. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17251. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  17252. +   (clobber (reg:SI  8))
  17253. +   (clobber (reg:SI  9))
  17254. +   (clobber (reg:SI 10))
  17255. +   (clobber (reg:SI 11))
  17256. +   (clobber (reg:SI 12))
  17257. +   (clobber (match_scratch:SI 5 "X"))]
  17258. +  "TARGET_STRING && ! TARGET_POWER
  17259. +   && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 32
  17260. +   && (REGNO (operands[0]) < 7 || REGNO (operands[0]) > 12)
  17261. +   && (REGNO (operands[1]) < 7 || REGNO (operands[1]) > 12)
  17262. +   && REGNO (operands[4]) == 7"
  17263. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17264. +  [(set_attr "type" "load")
  17265. +   (set_attr "length" "8")])
  17266. +
  17267. +;; Move up to 16 bytes at a time, using 4 fixed registers to avoid spill problems
  17268. +;; with TImode
  17269. +(define_expand "movstrsi_4reg"
  17270. +  [(parallel [(set (match_operand 0 "" "")
  17271. +           (match_operand 1 "" ""))
  17272. +          (use (match_operand 2 "" ""))
  17273. +          (use (match_operand 3 "" ""))
  17274. +          (clobber (reg:SI  9))
  17275. +          (clobber (reg:SI 10))
  17276. +          (clobber (reg:SI 11))
  17277. +          (clobber (reg:SI 12))
  17278. +          (clobber (match_scratch:SI 4 ""))])]
  17279. +  "TARGET_STRING"
  17280. +  "")
  17281. +
  17282. +(define_insn ""
  17283. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17284. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17285. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17286. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17287. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  17288. +   (clobber (reg:SI 10))
  17289. +   (clobber (reg:SI 11))
  17290. +   (clobber (reg:SI 12))
  17291. +   (clobber (match_scratch:SI 5 "=q"))]
  17292. +  "TARGET_STRING && TARGET_POWER
  17293. +   && INTVAL (operands[2]) > 8 && INTVAL (operands[2]) <= 16
  17294. +   && (REGNO (operands[0]) < 9 || REGNO (operands[0]) > 12)
  17295. +   && (REGNO (operands[1]) < 9 || REGNO (operands[1]) > 12)
  17296. +   && REGNO (operands[4]) == 9"
  17297. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17298. +  [(set_attr "type" "load")
  17299. +   (set_attr "length" "8")])
  17300. +
  17301. +(define_insn ""
  17302. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17303. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17304. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17305. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17306. +   (clobber (match_operand:SI 4 "gpc_reg_operand" "=r"))
  17307. +   (clobber (reg:SI 10))
  17308. +   (clobber (reg:SI 11))
  17309. +   (clobber (reg:SI 12))
  17310. +   (clobber (match_scratch:SI 5 "X"))]
  17311. +  "TARGET_STRING && ! TARGET_POWER
  17312. +   && INTVAL (operands[2]) > 8 && INTVAL (operands[2]) <= 16
  17313. +   && (REGNO (operands[0]) < 9 || REGNO (operands[0]) > 12)
  17314. +   && (REGNO (operands[1]) < 9 || REGNO (operands[1]) > 12)
  17315. +   && REGNO (operands[4]) == 9"
  17316. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17317. +  [(set_attr "type" "load")
  17318. +   (set_attr "length" "8")])
  17319. +
  17320. +;; Move up to 8 bytes at a time.
  17321. +(define_expand "movstrsi_2reg"
  17322. +  [(parallel [(set (match_operand 0 "" "")
  17323. +           (match_operand 1 "" ""))
  17324. +          (use (match_operand 2 "" ""))
  17325. +          (use (match_operand 3 "" ""))
  17326. +          (clobber (match_scratch:DI 4 ""))
  17327. +          (clobber (match_scratch:SI 5 ""))])]
  17328. +  "TARGET_STRING && ! TARGET_64BIT"
  17329. +  "")
  17330. +
  17331. +(define_insn ""
  17332. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17333. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17334. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17335. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17336. +   (clobber (match_scratch:DI 4 "=&r"))
  17337. +   (clobber (match_scratch:SI 5 "=q"))]
  17338. +  "TARGET_STRING && TARGET_POWER && ! TARGET_64BIT
  17339. +   && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8"
  17340. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17341. +  [(set_attr "type" "load")
  17342. +   (set_attr "length" "8")])
  17343. +
  17344. +(define_insn ""
  17345. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17346. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17347. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17348. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17349. +   (clobber (match_scratch:DI 4 "=&r"))
  17350. +   (clobber (match_scratch:SI 5 "X"))]
  17351. +  "TARGET_STRING && ! TARGET_POWER && ! TARGET_64BIT
  17352. +   && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8"
  17353. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17354. +  [(set_attr "type" "load")
  17355. +   (set_attr "length" "8")])
  17356. +
  17357. +;; Move up to 4 bytes at a time.
  17358. +(define_expand "movstrsi_1reg"
  17359. +  [(parallel [(set (match_operand 0 "" "")
  17360. +           (match_operand 1 "" ""))
  17361. +          (use (match_operand 2 "" ""))
  17362. +          (use (match_operand 3 "" ""))
  17363. +          (clobber (match_scratch:SI 4 ""))
  17364. +          (clobber (match_scratch:SI 5 ""))])]
  17365. +  "TARGET_STRING"
  17366. +  "")
  17367. +
  17368. +(define_insn ""
  17369. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17370. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17371. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17372. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17373. +   (clobber (match_scratch:SI 4 "=&r"))
  17374. +   (clobber (match_scratch:SI 5 "=q"))]
  17375. +  "TARGET_STRING && TARGET_POWER
  17376. +   && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4"
  17377. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17378. +  [(set_attr "type" "load")
  17379. +   (set_attr "length" "8")])
  17380. +
  17381. +(define_insn ""
  17382. +  [(set (mem:BLK (match_operand:SI 0 "gpc_reg_operand" "b"))
  17383. +    (mem:BLK (match_operand:SI 1 "gpc_reg_operand" "b")))
  17384. +   (use (match_operand:SI 2 "immediate_operand" "i"))
  17385. +   (use (match_operand:SI 3 "immediate_operand" "i"))
  17386. +   (clobber (match_scratch:SI 4 "=&r"))
  17387. +   (clobber (match_scratch:SI 5 "X"))]
  17388. +  "TARGET_STRING && ! TARGET_POWER
  17389. +   && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4"
  17390. +  "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2"
  17391. +  [(set_attr "type" "load")
  17392. +   (set_attr "length" "8")])
  17393. +
  17394. +
  17395. +;; Define insns that do load or store with update.  Some of these we can
  17396. +;; get by using pre-decrement or pre-increment, but the hardware can also
  17397. +;; do cases where the increment is not the size of the object.
  17398. +;;
  17399. +;; In all these cases, we use operands 0 and 1 for the register being
  17400. +;; incremented because those are the operands that local-alloc will
  17401. +;; tie and these are the pair most likely to be tieable (and the ones
  17402. +;; that will benefit the most).
  17403. +
  17404. +(define_insn "*movdi_update1"
  17405. +  [(set (match_operand:DI 3 "gpc_reg_operand" "=r,r")
  17406. +    (mem:DI (plus:DI (match_operand:DI 1 "gpc_reg_operand" "0,0")
  17407. +             (match_operand:DI 2 "reg_or_short_operand" "r,I"))))
  17408. +   (set (match_operand:DI 0 "gpc_reg_operand" "=b,b")
  17409. +    (plus:DI (match_dup 1) (match_dup 2)))]
  17410. +  "TARGET_POWERPC64 && TARGET_UPDATE"
  17411. +  "@
  17412. +   ldux %3,%0,%2
  17413. +   ldu %3,%2(%0)"
  17414. +  [(set_attr "type" "load")])
  17415. +
  17416. +(define_insn "*movdi_update2"
  17417. +  [(set (match_operand:DI 3 "gpc_reg_operand" "=r")
  17418. +    (sign_extend:DI
  17419. +     (mem:SI (plus:DI (match_operand:DI 1 "gpc_reg_operand" "0")
  17420. +              (match_operand:DI 2 "gpc_reg_operand" "r")))))
  17421. +   (set (match_operand:DI 0 "gpc_reg_operand" "=b")
  17422. +    (plus:DI (match_dup 1) (match_dup 2)))]
  17423. +  "TARGET_POWERPC64"
  17424. +  "lwaux %3,%0,%2"
  17425. +  [(set_attr "type" "load")])
  17426. +
  17427. +(define_insn "movdi_update"
  17428. +  [(set (mem:DI (plus:DI (match_operand:DI 1 "gpc_reg_operand" "0,0")
  17429. +             (match_operand:DI 2 "reg_or_short_operand" "r,I")))
  17430. +    (match_operand:DI 3 "gpc_reg_operand" "r,r"))
  17431. +   (set (match_operand:DI 0 "gpc_reg_operand" "=b,b")
  17432. +    (plus:DI (match_dup 1) (match_dup 2)))]
  17433. +  "TARGET_POWERPC64 && TARGET_UPDATE"
  17434. +  "@
  17435. +   stdux %3,%0,%2
  17436. +   stdu %3,%2(%0)"
  17437. +  [(set_attr "type" "store")])
  17438. +
  17439. +(define_insn "*movsi_update1"
  17440. +  [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
  17441. +    (mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17442. +             (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
  17443. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17444. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17445. +  ""
  17446. +  "@
  17447. +   {lux|lwzux} %3,%0,%2
  17448. +   {lu|lwzu} %3,%2(%0)"
  17449. +  [(set_attr "type" "load")])
  17450. +
  17451. +(define_insn "movsi_update"
  17452. +  [(set (mem:SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17453. +             (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  17454. +    (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  17455. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17456. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17457. +  "TARGET_UPDATE"
  17458. +  "@
  17459. +   {stux|stwux} %3,%0,%2
  17460. +   {stu|stwu} %3,%2(%0)"
  17461. +  [(set_attr "type" "store")])
  17462. +
  17463. +(define_insn "*movhi_update"
  17464. +  [(set (match_operand:HI 3 "gpc_reg_operand" "=r,r")
  17465. +    (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17466. +             (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
  17467. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17468. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17469. +  "TARGET_UPDATE"
  17470. +  "@
  17471. +   lhzux %3,%0,%2
  17472. +   lhzu %3,%2(%0)"
  17473. +  [(set_attr "type" "load")])
  17474. +
  17475. +(define_insn "*movhi_update2"
  17476. +  [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
  17477. +    (zero_extend:SI
  17478. +     (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17479. +              (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
  17480. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17481. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17482. +  "TARGET_UPDATE"
  17483. +  "@
  17484. +   lhzux %3,%0,%2
  17485. +   lhzu %3,%2(%0)"
  17486. +  [(set_attr "type" "load")])
  17487. +
  17488. +(define_insn "*movhi_update3"
  17489. +  [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
  17490. +    (sign_extend:SI
  17491. +     (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17492. +              (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
  17493. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17494. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17495. +  "TARGET_UPDATE"
  17496. +  "@
  17497. +   lhaux %3,%0,%2
  17498. +   lhau %3,%2(%0)"
  17499. +  [(set_attr "type" "load")])
  17500. +
  17501. +(define_insn "*movhi_update4"
  17502. +  [(set (mem:HI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17503. +             (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  17504. +    (match_operand:HI 3 "gpc_reg_operand" "r,r"))
  17505. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17506. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17507. +  "TARGET_UPDATE"
  17508. +  "@
  17509. +   sthux %3,%0,%2
  17510. +   sthu %3,%2(%0)"
  17511. +  [(set_attr "type" "store")])
  17512. +
  17513. +(define_insn "*movqi_update1"
  17514. +  [(set (match_operand:QI 3 "gpc_reg_operand" "=r,r")
  17515. +    (mem:QI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17516. +             (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
  17517. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17518. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17519. +  "TARGET_UPDATE"
  17520. +  "@
  17521. +   lbzux %3,%0,%2
  17522. +   lbzu %3,%2(%0)"
  17523. +  [(set_attr "type" "load")])
  17524. +
  17525. +(define_insn "*movqi_update2"
  17526. +  [(set (match_operand:SI 3 "gpc_reg_operand" "=r,r")
  17527. +    (zero_extend:SI
  17528. +     (mem:QI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17529. +              (match_operand:SI 2 "reg_or_short_operand" "r,I")))))
  17530. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17531. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17532. +  "TARGET_UPDATE"
  17533. +  "@
  17534. +   lbzux %3,%0,%2
  17535. +   lbzu %3,%2(%0)"
  17536. +  [(set_attr "type" "load")])
  17537. +
  17538. +(define_insn "*movqi_update3"
  17539. +  [(set (mem:QI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17540. +             (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  17541. +    (match_operand:QI 3 "gpc_reg_operand" "r,r"))
  17542. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17543. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17544. +  "TARGET_UPDATE"
  17545. +  "@
  17546. +   stbux %3,%0,%2
  17547. +   stbu %3,%2(%0)"
  17548. +  [(set_attr "type" "store")])
  17549. +
  17550. +(define_insn "*movsf_update1"
  17551. +  [(set (match_operand:SF 3 "gpc_reg_operand" "=f,f")
  17552. +    (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17553. +             (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
  17554. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17555. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17556. +  "TARGET_HARD_FLOAT && TARGET_UPDATE"
  17557. +  "@
  17558. +   lfsux %3,%0,%2
  17559. +   lfsu %3,%2(%0)"
  17560. +  [(set_attr "type" "fpload")])
  17561. +
  17562. +(define_insn "*movsf_update2"
  17563. +  [(set (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17564. +             (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  17565. +    (match_operand:SF 3 "gpc_reg_operand" "f,f"))
  17566. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17567. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17568. +  "TARGET_HARD_FLOAT && TARGET_UPDATE"
  17569. +  "@
  17570. +   stfsux %3,%0,%2
  17571. +   stfsu %3,%2(%0)"
  17572. +  [(set_attr "type" "fpstore")])
  17573. +
  17574. +(define_insn "*movsf_update3"
  17575. +  [(set (match_operand:SF 3 "gpc_reg_operand" "=r,r")
  17576. +    (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17577. +             (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
  17578. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17579. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17580. +  "TARGET_SOFT_FLOAT && TARGET_UPDATE"
  17581. +  "@
  17582. +   {lux|lwzux} %3,%0,%2
  17583. +   {lu|lwzu} %3,%2(%0)"
  17584. +  [(set_attr "type" "load")])
  17585. +
  17586. +(define_insn "*movsf_update4"
  17587. +  [(set (mem:SF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17588. +             (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  17589. +    (match_operand:SF 3 "gpc_reg_operand" "r,r"))
  17590. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17591. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17592. +  "TARGET_SOFT_FLOAT && TARGET_UPDATE"
  17593. +  "@
  17594. +   {stux|stwux} %3,%0,%2
  17595. +   {stu|stwu} %3,%2(%0)"
  17596. +  [(set_attr "type" "store")])
  17597. +
  17598. +(define_insn "*movdf_update1"
  17599. +  [(set (match_operand:DF 3 "gpc_reg_operand" "=f,f")
  17600. +    (mem:DF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17601. +             (match_operand:SI 2 "reg_or_short_operand" "r,I"))))
  17602. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17603. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17604. +  "TARGET_HARD_FLOAT && TARGET_UPDATE"
  17605. +  "@
  17606. +   lfdux %3,%0,%2
  17607. +   lfdu %3,%2(%0)"
  17608. +  [(set_attr "type" "fpload")])
  17609. +
  17610. +(define_insn "*movdf_update2"
  17611. +  [(set (mem:DF (plus:SI (match_operand:SI 1 "gpc_reg_operand" "0,0")
  17612. +             (match_operand:SI 2 "reg_or_short_operand" "r,I")))
  17613. +    (match_operand:DF 3 "gpc_reg_operand" "f,f"))
  17614. +   (set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
  17615. +    (plus:SI (match_dup 1) (match_dup 2)))]
  17616. +  "TARGET_HARD_FLOAT && TARGET_UPDATE"
  17617. +  "@
  17618. +   stfdux %3,%0,%2
  17619. +   stfdu %3,%2(%0)"
  17620. +  [(set_attr "type" "fpstore")])
  17621. +
  17622. +;; Peephole to convert two consecutive FP loads or stores into lfq/stfq.
  17623. +
  17624. +(define_peephole
  17625. +  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")
  17626. +    (match_operand:DF 1 "memory_operand" ""))
  17627. +   (set (match_operand:DF 2 "gpc_reg_operand" "=f")
  17628. +    (match_operand:DF 3 "memory_operand" ""))]
  17629. +  "TARGET_POWER2
  17630. +   && TARGET_HARD_FLOAT
  17631. +   && registers_ok_for_quad_peep (operands[0], operands[2])
  17632. +   && ! MEM_VOLATILE_P (operands[1]) && ! MEM_VOLATILE_P (operands[3])
  17633. +   && addrs_ok_for_quad_peep (XEXP (operands[1], 0), XEXP (operands[3], 0))"
  17634. +  "lfq%U1%X1 %0,%1")
  17635. +
  17636. +(define_peephole
  17637. +  [(set (match_operand:DF 0 "memory_operand" "")
  17638. +    (match_operand:DF 1 "gpc_reg_operand" "f"))
  17639. +   (set (match_operand:DF 2 "memory_operand" "")
  17640. +    (match_operand:DF 3 "gpc_reg_operand" "f"))]
  17641. +  "TARGET_POWER2
  17642. +   && TARGET_HARD_FLOAT
  17643. +   && registers_ok_for_quad_peep (operands[1], operands[3])
  17644. +   && ! MEM_VOLATILE_P (operands[0]) && ! MEM_VOLATILE_P (operands[2])
  17645. +   && addrs_ok_for_quad_peep (XEXP (operands[0], 0), XEXP (operands[2], 0))"
  17646. +  "stfq%U0%X0 %1,%0")
  17647. +
  17648. +;; Next come insns related to the calling sequence.
  17649. +;;
  17650. +;; First, an insn to allocate new stack space for dynamic use (e.g., alloca).
  17651. +;; We move the back-chain and decrement the stack pointer.
  17652. +
  17653. +(define_expand "allocate_stack"
  17654. +  [(set (match_operand 0 "gpc_reg_operand" "=r")
  17655. +    (minus (reg 1) (match_operand 1 "reg_or_short_operand" "")))
  17656. +   (set (reg 1)
  17657. +    (minus (reg 1) (match_dup 1)))]
  17658. +  ""
  17659. +  "
  17660. +{ rtx chain = gen_reg_rtx (Pmode);
  17661. +  rtx stack_bot = gen_rtx_MEM (Pmode, stack_pointer_rtx);
  17662. +  rtx neg_op0;
  17663. +
  17664. +  emit_move_insn (chain, stack_bot);
  17665. +
  17666. +  /* Under Windows NT, we need to add stack probes for large/variable
  17667. +     allocations, so do it via a call to the external function alloca
  17668. +     instead of doing it inline.  */
  17669. +  if (DEFAULT_ABI == ABI_NT
  17670. +      && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) > 4096))
  17671. +    {
  17672. +      rtx tmp = gen_reg_rtx (Pmode);
  17673. +      emit_library_call_value (gen_rtx_SYMBOL_REF (Pmode, \"__allocate_stack\"),
  17674. +                   tmp, 0, Pmode, 1, operands[1], Pmode);
  17675. +      emit_insn (gen_set_sp (tmp));
  17676. +      emit_move_insn (operands[0], tmp);
  17677. +      DONE;
  17678. +    }
  17679. +
  17680. +  if (GET_CODE (operands[1]) != CONST_INT
  17681. +      || INTVAL (operands[1]) < -32767
  17682. +      || INTVAL (operands[1]) > 32768)
  17683. +    {
  17684. +      neg_op0 = gen_reg_rtx (Pmode);
  17685. +      if (TARGET_32BIT)
  17686. +    emit_insn (gen_negsi2 (neg_op0, operands[1]));
  17687. +      else
  17688. +    emit_insn (gen_negdi2 (neg_op0, operands[1]));
  17689. +    }
  17690. +  else
  17691. +    neg_op0 = GEN_INT (- INTVAL (operands[1]));
  17692. +
  17693. +  if (TARGET_UPDATE)
  17694. +    emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update : gen_movdi_update))
  17695. +        (stack_pointer_rtx, stack_pointer_rtx, neg_op0, chain));
  17696. +
  17697. +  else
  17698. +    {
  17699. +      emit_insn ((* ((TARGET_32BIT) ? gen_addsi3 : gen_adddi3))
  17700. +         (stack_pointer_rtx, stack_pointer_rtx, neg_op0));
  17701. +      emit_move_insn (gen_rtx_MEM (Pmode, stack_pointer_rtx), chain);
  17702. +    }
  17703. +
  17704. +  emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
  17705. +  DONE;
  17706. +}")
  17707. +
  17708. +;; Marker to indicate that the stack pointer was changed under NT in
  17709. +;; ways not known to the compiler
  17710. +
  17711. +(define_insn "set_sp"
  17712. +  [(set (reg:SI 1)
  17713. +    (unspec [(match_operand:SI 0 "register_operand" "r")] 7))]
  17714. +  ""
  17715. +  ""
  17716. +  [(set_attr "length" "0")])
  17717. +
  17718. +;; These patterns say how to save and restore the stack pointer.  We need not
  17719. +;; save the stack pointer at function level since we are careful to
  17720. +;; preserve the backchain.  At block level, we have to restore the backchain
  17721. +;; when we restore the stack pointer.
  17722. +;;
  17723. +;; For nonlocal gotos, we must save both the stack pointer and its
  17724. +;; backchain and restore both.  Note that in the nonlocal case, the
  17725. +;; save area is a memory location.
  17726. +
  17727. +(define_expand "save_stack_function"
  17728. +  [(match_operand 0 "any_operand" "")
  17729. +   (match_operand 1 "any_operand" "")]
  17730. +  ""
  17731. +  "DONE;")
  17732. +
  17733. +(define_expand "restore_stack_function"
  17734. +  [(match_operand 0 "any_operand" "")
  17735. +   (match_operand 1 "any_operand" "")]
  17736. +  ""
  17737. +  "DONE;")
  17738. +
  17739. +(define_expand "restore_stack_block"
  17740. +  [(use (match_operand 0 "register_operand" ""))
  17741. +   (set (match_dup 2) (match_dup 3))
  17742. +   (set (match_dup 0) (match_operand 1 "register_operand" ""))
  17743. +   (set (match_dup 3) (match_dup 2))]
  17744. +  ""
  17745. +  "
  17746. +{
  17747. +  operands[2] = gen_reg_rtx (Pmode);
  17748. +  operands[3] = gen_rtx_MEM (Pmode, operands[0]);
  17749. +}")
  17750. +
  17751. +(define_expand "save_stack_nonlocal"
  17752. +  [(match_operand 0 "memory_operand" "")
  17753. +   (match_operand 1 "register_operand" "")]
  17754. +  ""
  17755. +  "
  17756. +{
  17757. +  rtx temp = gen_reg_rtx (Pmode);
  17758. +
  17759. +  /* Copy the backchain to the first word, sp to the second.  */
  17760. +  emit_move_insn (temp, gen_rtx_MEM (Pmode, operands[1]));
  17761. +  emit_move_insn (operand_subword (operands[0], 0, 0, (TARGET_32BIT ? DImode : TImode)),
  17762. +          temp);
  17763. +  emit_move_insn (operand_subword (operands[0], 1, 0, (TARGET_32BIT ? DImode : TImode)),
  17764. +          operands[1]);
  17765. +  DONE;
  17766. +}")
  17767. +
  17768. +(define_expand "restore_stack_nonlocal"
  17769. +  [(match_operand 0 "register_operand" "")
  17770. +   (match_operand 1 "memory_operand" "")]
  17771. +  ""
  17772. +  "
  17773. +{
  17774. +  rtx temp = gen_reg_rtx (Pmode);
  17775. +
  17776. +  /* Restore the backchain from the first word, sp from the second.  */
  17777. +  emit_move_insn (temp,
  17778. +          operand_subword (operands[1], 0, 0, (TARGET_32BIT ? DImode : TImode)));
  17779. +  emit_move_insn (operands[0],
  17780. +          operand_subword (operands[1], 1, 0, (TARGET_32BIT ? DImode : TImode)));
  17781. +  emit_move_insn (gen_rtx_MEM (Pmode, operands[0]), temp);
  17782. +  DONE;
  17783. +}")
  17784. +
  17785. +;; If we have -mminimal-toc, we need to reload r30 after a nonlocal goto.
  17786. +
  17787. +(define_insn "nonlocal_goto_receiver"
  17788. +  [(unspec_volatile [(const_int 0)] 1)]
  17789. +  "TARGET_TOC && TARGET_MINIMAL_TOC"
  17790. +  "*
  17791. +{
  17792. +  rs6000_output_load_toc_table (asm_out_file, 30);
  17793. +  return \"\";
  17794. +}"
  17795. +  [(set_attr "type" "load")
  17796. +   (set_attr "length" "24")])
  17797. +
  17798. +;; A function pointer under AIX is a pointer to a data area whose first word
  17799. +;; contains the actual address of the function, whose second word contains a
  17800. +;; pointer to its TOC, and whose third word contains a value to place in the
  17801. +;; static chain register (r11).  Note that if we load the static chain, our
  17802. +;; "trampoline" need not have any executable code.
  17803. +;;
  17804. +;; operands[0] is a register pointing to the 3 word descriptor (aka, the function address)
  17805. +;; operands[1] is the stack size to clean up
  17806. +;; operands[2] is the value FUNCTION_ARG returns for the VOID argument (must be 0 for AIX)
  17807. +;; operands[3] is location to store the TOC
  17808. +;; operands[4] is the TOC register
  17809. +;; operands[5] is the static chain register
  17810. +;;
  17811. +;; We do not break this into separate insns, so that the scheduler will not try
  17812. +;; to move the load of the new TOC before any loads from the TOC.
  17813. +
  17814. +(define_insn "call_indirect_aix32"
  17815. +  [(call (mem:SI (match_operand:SI 0 "gpc_reg_operand" "b"))
  17816. +     (match_operand 1 "const_int_operand" "n"))
  17817. +   (use (match_operand 2 "const_int_operand" "n"))
  17818. +   (use (match_operand 3 "offsettable_mem_operand" "o"))
  17819. +   (use (match_operand 4 "gpc_reg_operand" "r"))
  17820. +   (clobber (match_operand 5 "gpc_reg_operand" "=r"))
  17821. +   (clobber (match_scratch:SI 6 "=&r"))
  17822. +   (clobber (match_scratch:SI 7 "=l"))]
  17823. +  "DEFAULT_ABI == ABI_AIX
  17824. +   && (INTVAL (operands[2]) == CALL_NORMAL || (INTVAL (operands[2]) & CALL_LONG) != 0)"
  17825. +  "{st|stw} %4,%3\;{l|lwz} %6,0(%0)\;{l|lwz} %4,4(%0)\;mt%7 %6\;{l|lwz} %5,8(%0)\;{brl|blrl}\;{l|lwz} %4,%3"
  17826. +  [(set_attr "type" "load")
  17827. +   (set_attr "length" "28")])
  17828. +
  17829. +(define_insn "call_indirect_aix64"
  17830. +  [(call (mem:SI (match_operand:DI 0 "gpc_reg_operand" "b"))
  17831. +     (match_operand 1 "const_int_operand" "n"))
  17832. +   (use (match_operand 2 "const_int_operand" "n"))
  17833. +   (use (match_operand 3 "offsettable_mem_operand" "o"))
  17834. +   (use (match_operand 4 "gpc_reg_operand" "r"))
  17835. +   (clobber (match_operand 5 "gpc_reg_operand" "=r"))
  17836. +   (clobber (match_scratch:SI 6 "=&r"))
  17837. +   (clobber (match_scratch:SI 7 "=l"))]
  17838. +  "TARGET_64BIT && DEFAULT_ABI == ABI_AIX
  17839. +   && (INTVAL (operands[2]) == CALL_NORMAL || (INTVAL (operands[2]) & CALL_LONG) != 0)"
  17840. +  "std %4,%3\;ld %6,0(%0)\;ld %4,8(%0)\;mt%7 %6\;ld %5,16(%0)\;blrl\;ld %4,%3"
  17841. +  [(set_attr "type" "load")
  17842. +   (set_attr "length" "28")])
  17843. +
  17844. +(define_insn "call_value_indirect_aix32"
  17845. +  [(set (match_operand 0 "register_operand" "fg")
  17846. +    (call (mem:SI (match_operand:SI 1 "gpc_reg_operand" "b"))
  17847. +          (match_operand 2 "const_int_operand" "n")))
  17848. +   (use (match_operand 3 "const_int_operand" "n"))
  17849. +   (use (match_operand 4 "offsettable_mem_operand" "o"))
  17850. +   (use (match_operand 5 "gpc_reg_operand" "r"))
  17851. +   (clobber (match_operand 6 "gpc_reg_operand" "=r"))
  17852. +   (clobber (match_scratch:SI 7 "=&r"))
  17853. +   (clobber (match_scratch:SI 8 "=l"))]
  17854. +  "DEFAULT_ABI == ABI_AIX
  17855. +   && (INTVAL (operands[3]) == CALL_NORMAL || (INTVAL (operands[3]) & CALL_LONG) != 0)"
  17856. +  "{st|stw} %5,%4\;{l|lwz} %7,0(%1)\;{l|lwz} %5,4(%1)\;mt%8 %7\;{l|lwz} %6,8(%1)\;{brl|blrl}\;{l|lwz} %5,%4"
  17857. +  [(set_attr "type" "load")
  17858. +   (set_attr "length" "28")])
  17859. +
  17860. +(define_insn "call_value_indirect_aix64"
  17861. +  [(set (match_operand 0 "register_operand" "fg")
  17862. +    (call (mem:SI (match_operand:DI 1 "gpc_reg_operand" "b"))
  17863. +          (match_operand 2 "const_int_operand" "n")))
  17864. +   (use (match_operand 3 "const_int_operand" "n"))
  17865. +   (use (match_operand 4 "offsettable_mem_operand" "o"))
  17866. +   (use (match_operand 5 "gpc_reg_operand" "r"))
  17867. +   (clobber (match_operand 6 "gpc_reg_operand" "=r"))
  17868. +   (clobber (match_scratch:SI 7 "=&r"))
  17869. +   (clobber (match_scratch:SI 8 "=l"))]
  17870. +  "TARGET_64BIT && DEFAULT_ABI == ABI_AIX
  17871. +   && (INTVAL (operands[3]) == CALL_NORMAL || (INTVAL (operands[3]) & CALL_LONG) != 0)"
  17872. +  "std %5,%4\;ld %7,0(%1)\;ld %5,8(%1)\;mt%8 %7\;ld %6,16(%1)\;blrl\;ld %5,%4"
  17873. +  [(set_attr "type" "load")
  17874. +   (set_attr "length" "28")])
  17875. +
  17876. +;; A function pointer undef NT is a pointer to a data area whose first word
  17877. +;; contains the actual address of the function, whose second word contains a
  17878. +;; pointer to its TOC.  The static chain is not stored under NT, which means
  17879. +;; that we need a trampoline.
  17880. +;;
  17881. +;; operands[0] is an SImode pseudo in which we place the address of the function.
  17882. +;; operands[1] is the stack size to clean up
  17883. +;; operands[2] is the value FUNCTION_ARG returns for the VOID argument (must be 0 for NT)
  17884. +;; operands[3] is location to store the TOC
  17885. +;; operands[4] is the TOC register
  17886. +;;
  17887. +;; We do not break this into separate insns, so that the scheduler will not try
  17888. +;; to move the load of the new TOC before any loads from the TOC.
  17889. +
  17890. +(define_insn "call_indirect_nt"
  17891. +  [(call (mem:SI (match_operand:SI 0 "gpc_reg_operand" "b"))
  17892. +     (match_operand 1 "const_int_operand" "n"))
  17893. +   (use (match_operand 2 "const_int_operand" "n"))
  17894. +   (use (match_operand 3 "offsettable_mem_operand" "o"))
  17895. +   (use (match_operand 4 "gpc_reg_operand" "r"))
  17896. +   (clobber (match_scratch:SI 5 "=&r"))
  17897. +   (clobber (match_scratch:SI 6 "=l"))]
  17898. +  "DEFAULT_ABI == ABI_NT
  17899. +   && (INTVAL (operands[2]) == CALL_NORMAL || (INTVAL (operands[2]) & CALL_LONG) != 0)"
  17900. +  "{st|stw} %4,%a3\;{l|lwz} %5,0(%0)\;{l|lwz} %4,4(%0)\;mt%6 %5\;{brl|blrl}\;{l|lwz} %4,%a3"
  17901. +  [(set_attr "type" "load")
  17902. +   (set_attr "length" "24")])
  17903. +
  17904. +(define_insn "call_value_indirect_nt"
  17905. +  [(set (match_operand 0 "register_operand" "fg")
  17906. +    (call (mem:SI (match_operand:SI 1 "gpc_reg_operand" "b"))
  17907. +          (match_operand 2 "const_int_operand" "n")))
  17908. +   (use (match_operand 3 "const_int_operand" "n"))
  17909. +   (use (match_operand 4 "offsettable_mem_operand" "o"))
  17910. +   (use (match_operand 5 "gpc_reg_operand" "r"))
  17911. +   (clobber (match_scratch:SI 6 "=&r"))
  17912. +   (clobber (match_scratch:SI 7 "=l"))]
  17913. +  "DEFAULT_ABI == ABI_NT
  17914. +   && (INTVAL (operands[3]) == CALL_NORMAL || (INTVAL (operands[3]) & CALL_LONG) != 0)"
  17915. +  "{st|stw} %5,%a4\;{l|lwz} %6,0(%1)\;{l|lwz} %5,4(%1)\;mt%7 %6\;{brl|blrl}\;{l|lwz} %5,%a4"
  17916. +  [(set_attr "type" "load")
  17917. +   (set_attr "length" "24")])
  17918. +
  17919. +;; A function pointer under System V is just a normal pointer
  17920. +;; operands[0] is the function pointer
  17921. +;; operands[1] is the stack size to clean up
  17922. +;; operands[2] is the value FUNCTION_ARG returns for the VOID argument which indicates how to set cr1
  17923. +
  17924. +(define_insn "call_indirect_sysv"
  17925. +  [(call (mem:SI (match_operand:SI 0 "register_operand" "l,l"))
  17926. +     (match_operand 1 "const_int_operand" "n,n"))
  17927. +   (use (match_operand 2 "const_int_operand" "O,n"))
  17928. +   (clobber (match_scratch:SI 3 "=l,l"))]
  17929. +  "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS || DEFAULT_ABI == ABI_AIX_NODESC"
  17930. +  "*
  17931. +{
  17932. +  if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
  17933. +    output_asm_insn (\"crxor 6,6,6\", operands);
  17934. +
  17935. +  else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
  17936. +    output_asm_insn (\"creqv 6,6,6\", operands);
  17937. +
  17938. +  return \"{brl|blrl}\";
  17939. +}"
  17940. +  [(set_attr "type" "jmpreg")
  17941. +   (set_attr "length" "4,8")])
  17942. +
  17943. +(define_insn "call_value_indirect_sysv"
  17944. +  [(set (match_operand 0 "register_operand" "=fg,fg")
  17945. +    (call (mem:SI (match_operand:SI 1 "register_operand" "l,l"))
  17946. +          (match_operand 2 "const_int_operand" "n,n")))
  17947. +   (use (match_operand 3 "const_int_operand" "O,n"))
  17948. +   (clobber (match_scratch:SI 4 "=l,l"))]
  17949. +  "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS || DEFAULT_ABI == ABI_AIX_NODESC"
  17950. +  "*
  17951. +{
  17952. +  if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
  17953. +    output_asm_insn (\"crxor 6,6,6\", operands);
  17954. +
  17955. +  else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
  17956. +    output_asm_insn (\"creqv 6,6,6\", operands);
  17957. +
  17958. +  return \"{brl|blrl}\";
  17959. +}"
  17960. +  [(set_attr "type" "jmpreg")
  17961. +   (set_attr "length" "4,8")])
  17962. +
  17963. +;; Now the definitions for the call and call_value insns
  17964. +(define_expand "call"
  17965. +  [(parallel [(call (mem:SI (match_operand 0 "address_operand" ""))
  17966. +            (match_operand 1 "" ""))
  17967. +          (use (match_operand 2 "" ""))
  17968. +          (clobber (scratch:SI))])]
  17969. +  ""
  17970. +  "
  17971. +{
  17972. +  if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != CONST_INT)
  17973. +    abort ();
  17974. +
  17975. +  operands[0] = XEXP (operands[0], 0);
  17976. +
  17977. +  /* Convert NT DLL imports into an indirect call.  */
  17978. +  if (GET_CODE (operands[0]) == SYMBOL_REF
  17979. +      && (INTVAL (operands[2]) & CALL_NT_DLLIMPORT) != 0)
  17980. +    {
  17981. +      operands[0] = rs6000_dll_import_ref (operands[0]);
  17982. +      operands[2] = GEN_INT ((int)CALL_NORMAL);
  17983. +    }
  17984. +
  17985. +  if (GET_CODE (operands[0]) != SYMBOL_REF
  17986. +      || (INTVAL (operands[2]) & CALL_LONG) != 0)
  17987. +    {
  17988. +      if (INTVAL (operands[2]) & CALL_LONG)
  17989. +    operands[0] = rs6000_longcall_ref (operands[0]);
  17990. +
  17991. +      if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS)
  17992. +    emit_call_insn (gen_call_indirect_sysv (force_reg (Pmode, operands[0]),
  17993. +                        operands[1], operands[2]));
  17994. +      else
  17995. +    {
  17996. +      rtx toc_reg = gen_rtx_REG (Pmode, 2);
  17997. +      rtx toc_addr = RS6000_SAVE_TOC;
  17998. +
  17999. +      if (DEFAULT_ABI == ABI_AIX)
  18000. +        {
  18001. +          /* AIX function pointers are really pointers to a three word area */
  18002. +          rtx static_chain = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
  18003. +          emit_call_insn (TARGET_32BIT
  18004. +                  ? gen_call_indirect_aix32 (force_reg (Pmode, operands[0]),
  18005. +                                 operands[1], operands[2],
  18006. +                                 toc_addr, toc_reg, static_chain)
  18007. +                  : gen_call_indirect_aix64 (force_reg (Pmode, operands[0]),
  18008. +                                 operands[1], operands[2],
  18009. +                                 toc_addr, toc_reg, static_chain));
  18010. +        }
  18011. +      else if (DEFAULT_ABI == ABI_NT)
  18012. +        {
  18013. +          /* NT function pointers are really pointers to a two word area */
  18014. +          emit_call_insn (gen_call_indirect_nt (force_reg (Pmode, operands[0]),
  18015. +                            operands[1], operands[2],
  18016. +                            toc_addr, toc_reg));
  18017. +        }
  18018. +      else
  18019. +        abort ();
  18020. +    }
  18021. +      DONE;
  18022. +    }
  18023. +}")
  18024. +
  18025. +(define_expand "call_value"
  18026. +  [(parallel [(set (match_operand 0 "" "")
  18027. +           (call (mem:SI (match_operand 1 "address_operand" ""))
  18028. +             (match_operand 2 "" "")))
  18029. +          (use (match_operand 3 "" ""))
  18030. +          (clobber (scratch:SI))])]
  18031. +  ""
  18032. +  "
  18033. +{
  18034. +  if (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != CONST_INT)
  18035. +    abort ();
  18036. +
  18037. +  operands[1] = XEXP (operands[1], 0);
  18038. +
  18039. +  /* Convert NT DLL imports into an indirect call.  */
  18040. +  if (GET_CODE (operands[1]) == SYMBOL_REF
  18041. +      && (INTVAL (operands[3]) & CALL_NT_DLLIMPORT) != 0)
  18042. +    {
  18043. +      operands[1] = rs6000_dll_import_ref (operands[1]);
  18044. +      operands[3] = GEN_INT ((int)CALL_NORMAL);
  18045. +    }
  18046. +
  18047. +  if (GET_CODE (operands[1]) != SYMBOL_REF
  18048. +      || (INTVAL (operands[3]) & CALL_LONG) != 0)
  18049. +    {
  18050. +      if (INTVAL (operands[3]) & CALL_LONG)
  18051. +    operands[1] = rs6000_longcall_ref (operands[1]);
  18052. +
  18053. +      if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_SOLARIS)
  18054. +    emit_call_insn (gen_call_value_indirect_sysv (operands[0], operands[1],
  18055. +                              operands[2], operands[3]));
  18056. +      else
  18057. +    {
  18058. +      rtx toc_reg = gen_rtx_REG (Pmode, 2);
  18059. +      rtx toc_addr = RS6000_SAVE_TOC;
  18060. +
  18061. +      if (DEFAULT_ABI == ABI_AIX)
  18062. +        {
  18063. +          /* AIX function pointers are really pointers to a three word area */
  18064. +          rtx static_chain = gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
  18065. +          emit_call_insn (TARGET_32BIT
  18066. +                  ? gen_call_value_indirect_aix32 (operands[0],
  18067. +                                   force_reg (Pmode, operands[1]),
  18068. +                                   operands[2], operands[3],
  18069. +                                   toc_addr, toc_reg, static_chain)
  18070. +                  : gen_call_value_indirect_aix64 (operands[0],
  18071. +                                   force_reg (Pmode, operands[1]),
  18072. +                                   operands[2], operands[3],
  18073. +                                   toc_addr, toc_reg, static_chain));
  18074. +        }
  18075. +      else if (DEFAULT_ABI == ABI_NT)
  18076. +        {
  18077. +          /* NT function pointers are really pointers to a two word area */
  18078. +          emit_call_insn (gen_call_value_indirect_nt (operands[0],
  18079. +                              force_reg (Pmode, operands[1]),
  18080. +                              operands[2], operands[3],
  18081. +                              toc_addr, toc_reg));
  18082. +        }
  18083. +      else
  18084. +        abort ();
  18085. +    }
  18086. +      DONE;
  18087. +    }
  18088. +}")
  18089. +
  18090. +;; Call to function in current module.  No TOC pointer reload needed.
  18091. +;; Operand2 is non-zero if we are using the V.4 calling sequence and
  18092. +;; either the function was not prototyped, or it was prototyped as a
  18093. +;; variable argument function.  It is > 0 if FP registers were passed
  18094. +;; and < 0 if they were not.
  18095. +
  18096. +(define_insn "*call_local32"
  18097. +  [(call (mem:SI (match_operand:SI 0 "current_file_function_operand" "s,s"))
  18098. +     (match_operand 1 "" "g,g"))
  18099. +   (use (match_operand:SI 2 "immediate_operand" "O,n"))
  18100. +   (clobber (match_scratch:SI 3 "=l,l"))]
  18101. +  "(INTVAL (operands[2]) & CALL_LONG) == 0"
  18102. +  "*
  18103. +{
  18104. +  if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
  18105. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18106. +
  18107. +  else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
  18108. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18109. +
  18110. +  return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\";
  18111. +}"
  18112. +  [(set_attr "type" "branch")
  18113. +   (set_attr "length" "4,8")])
  18114. +
  18115. +(define_insn "*call_local64"
  18116. +  [(call (mem:SI (match_operand:DI 0 "current_file_function_operand" "s,s"))
  18117. +     (match_operand 1 "" "g,g"))
  18118. +   (use (match_operand:SI 2 "immediate_operand" "O,n"))
  18119. +   (clobber (match_scratch:SI 3 "=l,l"))]
  18120. +  "TARGET_64BIT && (INTVAL (operands[2]) & CALL_LONG) == 0"
  18121. +  "*
  18122. +{
  18123. +  if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
  18124. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18125. +
  18126. +  else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
  18127. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18128. +
  18129. +  return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\";
  18130. +}"
  18131. +  [(set_attr "type" "branch")
  18132. +   (set_attr "length" "4,8")])
  18133. +
  18134. +(define_insn "*ret_call_local32"
  18135. +  [(set (match_operand 0 "" "=fg,fg")
  18136. +    (call (mem:SI (match_operand:SI 1 "current_file_function_operand" "s,s"))
  18137. +          (match_operand 2 "" "g,g")))
  18138. +   (use (match_operand:SI 3 "immediate_operand" "O,n"))
  18139. +   (clobber (match_scratch:SI 4 "=l,l"))]
  18140. +  "(INTVAL (operands[3]) & CALL_LONG) == 0"
  18141. +  "*
  18142. +{
  18143. +  if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
  18144. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18145. +
  18146. +  else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
  18147. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18148. +
  18149. +  return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\";
  18150. +}"
  18151. +  [(set_attr "type" "branch")
  18152. +   (set_attr "length" "4,8")])
  18153. +
  18154. +
  18155. +(define_insn "*ret_call_local64"
  18156. +  [(set (match_operand 0 "" "=fg,fg")
  18157. +    (call (mem:SI (match_operand:DI 1 "current_file_function_operand" "s,s"))
  18158. +          (match_operand 2 "" "g,g")))
  18159. +   (use (match_operand:SI 3 "immediate_operand" "O,n"))
  18160. +   (clobber (match_scratch:SI 4 "=l,l"))]
  18161. +  "TARGET_64BIT && (INTVAL (operands[3]) & CALL_LONG) == 0"
  18162. +  "*
  18163. +{
  18164. +  if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
  18165. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18166. +
  18167. +  else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
  18168. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18169. +
  18170. +  return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\";
  18171. +}"
  18172. +  [(set_attr "type" "branch")
  18173. +   (set_attr "length" "4,8")])
  18174. +
  18175. +;; Call to function which may be in another module.  Restore the TOC
  18176. +;; pointer (r2) after the call unless this is System V.
  18177. +;; Operand2 is non-zero if we are using the V.4 calling sequence and
  18178. +;; either the function was not prototyped, or it was prototyped as a
  18179. +;; variable argument function.  It is > 0 if FP registers were passed
  18180. +;; and < 0 if they were not.
  18181. +
  18182. +(define_insn "*call_nonlocal_aix32"
  18183. +  [(call (mem:SI (match_operand:SI 0 "call_operand" "s,s"))
  18184. +     (match_operand 1 "" "fg,fg"))
  18185. +   (use (match_operand:SI 2 "immediate_operand" "O,n"))
  18186. +   (clobber (match_scratch:SI 3 "=l,l"))]
  18187. +  "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
  18188. +   && (INTVAL (operands[2]) & CALL_LONG) == 0"
  18189. +  "*
  18190. +{
  18191. +  /* Indirect calls should go through call_indirect */
  18192. +  if (GET_CODE (operands[0]) == REG)
  18193. +    abort ();
  18194. +
  18195. +  if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
  18196. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18197. +
  18198. +  else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
  18199. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18200. +
  18201. +  return (TARGET_WINDOWS_NT) ? \"bl %z0\;.znop %z0\" : \"bl %z0\;%.\";
  18202. +}"
  18203. +  [(set_attr "type" "branch")
  18204. +   (set_attr "length" "8,12")])
  18205. +
  18206. +(define_insn "*call_nonlocal_aix64"
  18207. +  [(call (mem:SI (match_operand:DI 0 "call_operand" "s,s"))
  18208. +     (match_operand 1 "" "fg,fg"))
  18209. +   (use (match_operand:SI 2 "immediate_operand" "O,n"))
  18210. +   (clobber (match_scratch:SI 3 "=l,l"))]
  18211. +  "TARGET_64BIT && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
  18212. +   && (INTVAL (operands[2]) & CALL_LONG) == 0"
  18213. +  "*
  18214. +{
  18215. +  /* Indirect calls should go through call_indirect */
  18216. +  if (GET_CODE (operands[0]) == REG)
  18217. +    abort ();
  18218. +
  18219. +  if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
  18220. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18221. +
  18222. +  else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
  18223. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18224. +
  18225. +  return (TARGET_WINDOWS_NT) ? \"bl %z0\;.znop %z0\" : \"bl %z0\;%.\";
  18226. +}"
  18227. +  [(set_attr "type" "branch")
  18228. +   (set_attr "length" "8,12")])
  18229. +
  18230. +(define_insn "*call_nonlocal_sysv"
  18231. +  [(call (mem:SI (match_operand:SI 0 "call_operand" "s,s"))
  18232. +     (match_operand 1 "" "fg,fg"))
  18233. +   (use (match_operand:SI 2 "immediate_operand" "O,n"))
  18234. +   (clobber (match_scratch:SI 3 "=l,l"))]
  18235. +  "(DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
  18236. +   && (INTVAL (operands[2]) & CALL_LONG) == 0"
  18237. +  "*
  18238. +{
  18239. +  /* Indirect calls should go through call_indirect */
  18240. +  if (GET_CODE (operands[0]) == REG)
  18241. +    abort ();
  18242. +
  18243. +  if (INTVAL (operands[2]) & CALL_V4_SET_FP_ARGS)
  18244. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18245. +
  18246. +  else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
  18247. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18248. +
  18249. +  return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@plt\" : \"bl %z0\";
  18250. +}"
  18251. +  [(set_attr "type" "branch")
  18252. +   (set_attr "length" "4,8")])
  18253. +
  18254. +(define_insn "*ret_call_nonlocal_aix32"
  18255. +  [(set (match_operand 0 "" "=fg,fg")
  18256. +    (call (mem:SI (match_operand:SI 1 "call_operand" "s,s"))
  18257. +          (match_operand 2 "" "fg,fg")))
  18258. +   (use (match_operand:SI 3 "immediate_operand" "O,n"))
  18259. +   (clobber (match_scratch:SI 4 "=l,l"))]
  18260. +  "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
  18261. +   && (INTVAL (operands[3]) & CALL_LONG) == 0"
  18262. +  "*
  18263. +{
  18264. +  /* This should be handled by call_value_indirect */
  18265. +  if (GET_CODE (operands[1]) == REG)
  18266. +    abort ();
  18267. +
  18268. +  if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
  18269. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18270. +
  18271. +  else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
  18272. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18273. +
  18274. +  return (TARGET_WINDOWS_NT) ? \"bl %z1\;.znop %z1\" : \"bl %z1\;%.\";
  18275. +}"
  18276. +  [(set_attr "type" "branch")
  18277. +   (set_attr "length" "8,12")])
  18278. +
  18279. +(define_insn "*ret_call_nonlocal_aix64"
  18280. +  [(set (match_operand 0 "" "=fg,fg")
  18281. +    (call (mem:SI (match_operand:DI 1 "call_operand" "s,s"))
  18282. +          (match_operand 2 "" "fg,fg")))
  18283. +   (use (match_operand:SI 3 "immediate_operand" "O,n"))
  18284. +   (clobber (match_scratch:SI 4 "=l,l"))]
  18285. +  "TARGET_64BIT && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
  18286. +   && (INTVAL (operands[3]) & CALL_LONG) == 0"
  18287. +  "*
  18288. +{
  18289. +  /* This should be handled by call_value_indirect */
  18290. +  if (GET_CODE (operands[1]) == REG)
  18291. +    abort ();
  18292. +
  18293. +  if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
  18294. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18295. +
  18296. +  else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
  18297. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18298. +
  18299. +  return (TARGET_WINDOWS_NT) ? \"bl %z1\;.znop %z1\" : \"bl %z1\;%.\";
  18300. +}"
  18301. +  [(set_attr "type" "branch")
  18302. +   (set_attr "length" "8,12")])
  18303. +
  18304. +(define_insn "*ret_call_nonlocal_sysv"
  18305. +  [(set (match_operand 0 "" "=fg,fg")
  18306. +    (call (mem:SI (match_operand:SI 1 "call_operand" "s,s"))
  18307. +          (match_operand 2 "" "fg,fg")))
  18308. +   (use (match_operand:SI 3 "immediate_operand" "O,n"))
  18309. +   (clobber (match_scratch:SI 4 "=l,l"))]
  18310. +  "(DEFAULT_ABI == ABI_AIX_NODESC || DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
  18311. +   && (INTVAL (operands[3]) & CALL_LONG) == 0"
  18312. +  "*
  18313. +{
  18314. +  /* This should be handled by call_value_indirect */
  18315. +  if (GET_CODE (operands[1]) == REG)
  18316. +    abort ();
  18317. +
  18318. +  if (INTVAL (operands[3]) & CALL_V4_SET_FP_ARGS)
  18319. +    output_asm_insn (\"crxor 6,6,6\", operands);
  18320. +
  18321. +  else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
  18322. +    output_asm_insn (\"creqv 6,6,6\", operands);
  18323. +
  18324. +  return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@plt\" : \"bl %z1\";
  18325. +}"
  18326. +  [(set_attr "type" "branch")
  18327. +   (set_attr "length" "4,8")])
  18328. +
  18329. +;; Call subroutine returning any type.
  18330. +(define_expand "untyped_call"
  18331. +  [(parallel [(call (match_operand 0 "" "")
  18332. +            (const_int 0))
  18333. +          (match_operand 1 "" "")
  18334. +          (match_operand 2 "" "")])]
  18335. +  ""
  18336. +  "
  18337. +{
  18338. +  int i;
  18339. +
  18340. +  emit_call_insn (gen_call (operands[0], const0_rtx, const0_rtx, const0_rtx));
  18341. +
  18342. +  for (i = 0; i < XVECLEN (operands[2], 0); i++)
  18343. +    {
  18344. +      rtx set = XVECEXP (operands[2], 0, i);
  18345. +      emit_move_insn (SET_DEST (set), SET_SRC (set));
  18346. +    }
  18347. +
  18348. +  /* The optimizer does not know that the call sets the function value
  18349. +     registers we stored in the result block.  We avoid problems by
  18350. +     claiming that all hard registers are used and clobbered at this
  18351. +     point.  */
  18352. +  emit_insn (gen_blockage ());
  18353. +
  18354. +  DONE;
  18355. +}")
  18356. +
  18357. +;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
  18358. +;; all of memory.  This blocks insns from being moved across this point.
  18359. +
  18360. +(define_insn "blockage"
  18361. +  [(unspec_volatile [(const_int 0)] 0)]
  18362. +  ""
  18363. +  "")
  18364. +
  18365. +;; V.4 specific code to initialize the PIC register
  18366. +
  18367. +(define_insn "init_v4_pic"
  18368. +  [(set (match_operand:SI 0 "register_operand" "=l")
  18369. +    (unspec [(const_int 0)] 7))]
  18370. +  "DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS"
  18371. +  "bl _GLOBAL_OFFSET_TABLE_@local-4"
  18372. +  [(set_attr "type" "branch")
  18373. +   (set_attr "length" "4")])
  18374. +
  18375. +
  18376. +;; Compare insns are next.  Note that the RS/6000 has two types of compares,
  18377. +;; signed & unsigned, and one type of branch.
  18378. +;;
  18379. +;; Start with the DEFINE_EXPANDs to generate the rtl for compares, scc
  18380. +;; insns, and branches.  We store the operands of compares until we see
  18381. +;; how it is used.
  18382. +(define_expand "cmpsi"
  18383. +  [(set (cc0)
  18384. +        (compare (match_operand:SI 0 "gpc_reg_operand" "")
  18385. +           (match_operand:SI 1 "reg_or_short_operand" "")))]
  18386. +  ""
  18387. +  "
  18388. +{
  18389. +  /* Take care of the possibility that operands[1] might be negative but
  18390. +     this might be a logical operation.  That insn doesn't exist.  */
  18391. +  if (GET_CODE (operands[1]) == CONST_INT
  18392. +      && INTVAL (operands[1]) < 0)
  18393. +    operands[1] = force_reg (SImode, operands[1]);
  18394. +
  18395. +  rs6000_compare_op0 = operands[0];
  18396. +  rs6000_compare_op1 = operands[1];
  18397. +  rs6000_compare_fp_p = 0;
  18398. +  DONE;
  18399. +}")
  18400. +
  18401. +(define_expand "cmpdi"
  18402. +  [(set (cc0)
  18403. +        (compare (match_operand:DI 0 "gpc_reg_operand" "")
  18404. +           (match_operand:DI 1 "reg_or_short_operand" "")))]
  18405. +  "TARGET_POWERPC64"
  18406. +  "
  18407. +{
  18408. +  /* Take care of the possibility that operands[1] might be negative but
  18409. +     this might be a logical operation.  That insn doesn't exist.  */
  18410. +  if (GET_CODE (operands[1]) == CONST_INT
  18411. +      && INTVAL (operands[1]) < 0)
  18412. +    operands[1] = force_reg (DImode, operands[1]);
  18413. +
  18414. +  rs6000_compare_op0 = operands[0];
  18415. +  rs6000_compare_op1 = operands[1];
  18416. +  rs6000_compare_fp_p = 0;
  18417. +  DONE;
  18418. +}")
  18419. +
  18420. +(define_expand "cmpsf"
  18421. +  [(set (cc0) (compare (match_operand:SF 0 "gpc_reg_operand" "")
  18422. +               (match_operand:SF 1 "gpc_reg_operand" "")))]
  18423. +  "TARGET_HARD_FLOAT"
  18424. +  "
  18425. +{
  18426. +  rs6000_compare_op0 = operands[0];
  18427. +  rs6000_compare_op1 = operands[1];
  18428. +  rs6000_compare_fp_p = 1;
  18429. +  DONE;
  18430. +}")
  18431. +
  18432. +(define_expand "cmpdf"
  18433. +  [(set (cc0) (compare (match_operand:DF 0 "gpc_reg_operand" "")
  18434. +               (match_operand:DF 1 "gpc_reg_operand" "")))]
  18435. +  "TARGET_HARD_FLOAT"
  18436. +  "
  18437. +{
  18438. +  rs6000_compare_op0 = operands[0];
  18439. +  rs6000_compare_op1 = operands[1];
  18440. +  rs6000_compare_fp_p = 1;
  18441. +  DONE;
  18442. +}")
  18443. +
  18444. +(define_expand "beq"
  18445. +  [(set (match_dup 2) (match_dup 1))
  18446. +   (set (pc)
  18447. +    (if_then_else (eq (match_dup 2)
  18448. +              (const_int 0))
  18449. +              (label_ref (match_operand 0 "" ""))
  18450. +              (pc)))]
  18451. +  ""
  18452. +  "
  18453. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18454. +  operands[1] = gen_rtx_COMPARE (mode,
  18455. +             rs6000_compare_op0, rs6000_compare_op1);
  18456. +  operands[2] = gen_reg_rtx (mode);
  18457. +}")
  18458. +
  18459. +(define_expand "bne"
  18460. +  [(set (match_dup 2) (match_dup 1))
  18461. +   (set (pc)
  18462. +    (if_then_else (ne (match_dup 2)
  18463. +              (const_int 0))
  18464. +              (label_ref (match_operand 0 "" ""))
  18465. +              (pc)))]
  18466. +  ""
  18467. +  "
  18468. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18469. +  operands[1] = gen_rtx_COMPARE (mode,
  18470. +             rs6000_compare_op0, rs6000_compare_op1);
  18471. +  operands[2] = gen_reg_rtx (mode);
  18472. +}")
  18473. +
  18474. +(define_expand "blt"
  18475. +  [(set (match_dup 2) (match_dup 1))
  18476. +   (set (pc)
  18477. +    (if_then_else (lt (match_dup 2)
  18478. +              (const_int 0))
  18479. +              (label_ref (match_operand 0 "" ""))
  18480. +              (pc)))]
  18481. +  ""
  18482. +  "
  18483. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18484. +  operands[1] = gen_rtx_COMPARE (mode,
  18485. +             rs6000_compare_op0, rs6000_compare_op1);
  18486. +  operands[2] = gen_reg_rtx (mode);
  18487. +}")
  18488. +
  18489. +(define_expand "bgt"
  18490. +  [(set (match_dup 2) (match_dup 1))
  18491. +   (set (pc)
  18492. +    (if_then_else (gt (match_dup 2)
  18493. +              (const_int 0))
  18494. +              (label_ref (match_operand 0 "" ""))
  18495. +              (pc)))]
  18496. +  ""
  18497. +  "
  18498. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18499. +  operands[1] = gen_rtx_COMPARE (mode,
  18500. +             rs6000_compare_op0, rs6000_compare_op1);
  18501. +  operands[2] = gen_reg_rtx (mode);
  18502. +}")
  18503. +
  18504. +(define_expand "ble"
  18505. +  [(set (match_dup 2) (match_dup 1))
  18506. +   (set (pc)
  18507. +    (if_then_else (le (match_dup 2)
  18508. +              (const_int 0))
  18509. +              (label_ref (match_operand 0 "" ""))
  18510. +              (pc)))]
  18511. +  ""
  18512. +  "
  18513. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18514. +  operands[1] = gen_rtx_COMPARE (mode,
  18515. +             rs6000_compare_op0, rs6000_compare_op1);
  18516. +  operands[2] = gen_reg_rtx (mode);
  18517. +}")
  18518. +
  18519. +(define_expand "bge"
  18520. +  [(set (match_dup 2) (match_dup 1))
  18521. +   (set (pc)
  18522. +    (if_then_else (ge (match_dup 2)
  18523. +              (const_int 0))
  18524. +              (label_ref (match_operand 0 "" ""))
  18525. +              (pc)))]
  18526. +  ""
  18527. +  "
  18528. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18529. +  operands[1] = gen_rtx_COMPARE (mode,
  18530. +             rs6000_compare_op0, rs6000_compare_op1);
  18531. +  operands[2] = gen_reg_rtx (mode);
  18532. +}")
  18533. +
  18534. +(define_expand "bgtu"
  18535. +  [(set (match_dup 2) (match_dup 1))
  18536. +   (set (pc)
  18537. +    (if_then_else (gtu (match_dup 2)
  18538. +               (const_int 0))
  18539. +              (label_ref (match_operand 0 "" ""))
  18540. +              (pc)))]
  18541. +  ""
  18542. +  "
  18543. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18544. +             rs6000_compare_op0, rs6000_compare_op1);
  18545. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18546. +}")
  18547. +
  18548. +(define_expand "bltu"
  18549. +  [(set (match_dup 2) (match_dup 1))
  18550. +   (set (pc)
  18551. +    (if_then_else (ltu (match_dup 2)
  18552. +               (const_int 0))
  18553. +              (label_ref (match_operand 0 "" ""))
  18554. +              (pc)))]
  18555. +  ""
  18556. +  "
  18557. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18558. +             rs6000_compare_op0, rs6000_compare_op1);
  18559. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18560. +}")
  18561. +
  18562. +(define_expand "bgeu"
  18563. +  [(set (match_dup 2) (match_dup 1))
  18564. +   (set (pc)
  18565. +    (if_then_else (geu (match_dup 2)
  18566. +               (const_int 0))
  18567. +              (label_ref (match_operand 0 "" ""))
  18568. +              (pc)))]
  18569. +  ""
  18570. +  "
  18571. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18572. +             rs6000_compare_op0, rs6000_compare_op1);
  18573. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18574. +}")
  18575. +
  18576. +(define_expand "bleu"
  18577. +  [(set (match_dup 2) (match_dup 1))
  18578. +   (set (pc)
  18579. +    (if_then_else (leu (match_dup 2)
  18580. +               (const_int 0))
  18581. +              (label_ref (match_operand 0 "" ""))
  18582. +              (pc)))]
  18583. +  ""
  18584. +  "
  18585. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18586. +             rs6000_compare_op0, rs6000_compare_op1);
  18587. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18588. +}")
  18589. +
  18590. +;; For SNE, we would prefer that the xor/abs sequence be used for integers.
  18591. +;; For SEQ, likewise, except that comparisons with zero should be done
  18592. +;; with an scc insns.  However, due to the order that combine see the
  18593. +;; resulting insns, we must, in fact, allow SEQ for integers.  Fail in
  18594. +;; the cases we don't want to handle.
  18595. +(define_expand "seq"
  18596. +  [(set (match_dup 2) (match_dup 1))
  18597. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18598. +    (eq:SI (match_dup 2) (const_int 0)))]
  18599. +  ""
  18600. +  "
  18601. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18602. +  operands[1] = gen_rtx_COMPARE (mode,
  18603. +             rs6000_compare_op0, rs6000_compare_op1);
  18604. +  operands[2] = gen_reg_rtx (mode);
  18605. +}")
  18606. +
  18607. +(define_expand "sne"
  18608. +  [(set (match_dup 2) (match_dup 1))
  18609. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18610. +    (ne:SI (match_dup 2) (const_int 0)))]
  18611. +  ""
  18612. +  "
  18613. +{ if (! rs6000_compare_fp_p)
  18614. +    FAIL;
  18615. +
  18616. +  operands[1] = gen_rtx_COMPARE (CCFPmode,
  18617. +             rs6000_compare_op0, rs6000_compare_op1);
  18618. +  operands[2] = gen_reg_rtx (CCFPmode);
  18619. +}")
  18620. +
  18621. +;; A > 0 is best done using the portable sequence, so fail in that case.
  18622. +(define_expand "sgt"
  18623. +  [(set (match_dup 2) (match_dup 1))
  18624. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18625. +    (gt:SI (match_dup 2) (const_int 0)))]
  18626. +  ""
  18627. +  "
  18628. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18629. +
  18630. +  if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
  18631. +    FAIL;
  18632. +
  18633. +  operands[1] = gen_rtx_COMPARE (mode,
  18634. +             rs6000_compare_op0, rs6000_compare_op1);
  18635. +  operands[2] = gen_reg_rtx (mode);
  18636. +}")
  18637. +
  18638. +;; A < 0 is best done in the portable way for A an integer.
  18639. +(define_expand "slt"
  18640. +  [(set (match_dup 2) (match_dup 1))
  18641. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18642. +    (lt:SI (match_dup 2) (const_int 0)))]
  18643. +  ""
  18644. +  "
  18645. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18646. +
  18647. +  if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
  18648. +    FAIL;
  18649. +
  18650. +  operands[1] = gen_rtx_COMPARE (mode,
  18651. +             rs6000_compare_op0, rs6000_compare_op1);
  18652. +  operands[2] = gen_reg_rtx (mode);
  18653. +}")
  18654. +
  18655. +(define_expand "sge"
  18656. +  [(set (match_dup 2) (match_dup 1))
  18657. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18658. +    (ge:SI (match_dup 2) (const_int 0)))]
  18659. +  ""
  18660. +  "
  18661. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18662. +  operands[1] = gen_rtx_COMPARE (mode,
  18663. +             rs6000_compare_op0, rs6000_compare_op1);
  18664. +  operands[2] = gen_reg_rtx (mode);
  18665. +}")
  18666. +
  18667. +;; A <= 0 is best done the portable way for A an integer.
  18668. +(define_expand "sle"
  18669. +  [(set (match_dup 2) (match_dup 1))
  18670. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18671. +    (le:SI (match_dup 2) (const_int 0)))]
  18672. +  ""
  18673. +  "
  18674. +{ enum machine_mode mode = rs6000_compare_fp_p ? CCFPmode : CCmode;
  18675. +
  18676. +  if (! rs6000_compare_fp_p && rs6000_compare_op1 == const0_rtx)
  18677. +    FAIL;
  18678. +
  18679. +  operands[1] = gen_rtx_COMPARE (mode,
  18680. +             rs6000_compare_op0, rs6000_compare_op1);
  18681. +  operands[2] = gen_reg_rtx (mode);
  18682. +}")
  18683. +
  18684. +(define_expand "sgtu"
  18685. +  [(set (match_dup 2) (match_dup 1))
  18686. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18687. +    (gtu:SI (match_dup 2) (const_int 0)))]
  18688. +  ""
  18689. +  "
  18690. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18691. +             rs6000_compare_op0, rs6000_compare_op1);
  18692. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18693. +}")
  18694. +
  18695. +(define_expand "sltu"
  18696. +  [(set (match_dup 2) (match_dup 1))
  18697. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18698. +    (ltu:SI (match_dup 2) (const_int 0)))]
  18699. +  ""
  18700. +  "
  18701. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18702. +             rs6000_compare_op0, rs6000_compare_op1);
  18703. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18704. +}")
  18705. +
  18706. +(define_expand "sgeu"
  18707. +  [(set (match_dup 2) (match_dup 1))
  18708. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18709. +    (geu:SI (match_dup 2) (const_int 0)))]
  18710. +  ""
  18711. +  "
  18712. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18713. +             rs6000_compare_op0, rs6000_compare_op1);
  18714. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18715. +}")
  18716. +
  18717. +(define_expand "sleu"
  18718. +  [(set (match_dup 2) (match_dup 1))
  18719. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18720. +    (leu:SI (match_dup 2) (const_int 0)))]
  18721. +  ""
  18722. +  "
  18723. +{ operands[1] = gen_rtx_COMPARE (CCUNSmode,
  18724. +             rs6000_compare_op0, rs6000_compare_op1);
  18725. +  operands[2] = gen_reg_rtx (CCUNSmode);
  18726. +}")
  18727. +
  18728. +;; Here are the actual compare insns.
  18729. +(define_insn ""
  18730. +  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
  18731. +    (compare:CC (match_operand:SI 1 "gpc_reg_operand" "r")
  18732. +            (match_operand:SI 2 "reg_or_short_operand" "rI")))]
  18733. +  ""
  18734. +  "{cmp%I2|cmpw%I2} %0,%1,%2"
  18735. +  [(set_attr "type" "compare")])
  18736. +
  18737. +(define_insn ""
  18738. +  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
  18739. +    (compare:CC (match_operand:DI 1 "gpc_reg_operand" "r")
  18740. +            (match_operand:DI 2 "reg_or_short_operand" "rI")))]
  18741. +  "TARGET_POWERPC64"
  18742. +  "cmpd%I2 %0,%1,%2"
  18743. +  [(set_attr "type" "compare")])
  18744. +
  18745. +;; If we are comparing a register for equality with a large constant,
  18746. +;; we can do this with an XOR followed by a compare.  But we need a scratch
  18747. +;; register for the result of the XOR.
  18748. +
  18749. +(define_split
  18750. +  [(set (match_operand:CC 0 "cc_reg_operand" "")
  18751. +    (compare:CC (match_operand:SI 1 "gpc_reg_operand" "")
  18752. +            (match_operand:SI 2 "non_short_cint_operand" "")))
  18753. +   (clobber (match_operand:SI 3 "gpc_reg_operand" ""))]
  18754. +  "find_single_use (operands[0], insn, 0)
  18755. +   && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
  18756. +       || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
  18757. +  [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
  18758. +   (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
  18759. +  "
  18760. +{
  18761. +  /* Get the constant we are comparing against, C,  and see what it looks like
  18762. +     sign-extended to 16 bits.  Then see what constant could be XOR'ed
  18763. +     with C to get the sign-extended value.  */
  18764. +
  18765. +  int c = INTVAL (operands[2]);
  18766. +  int sextc = (c << 16) >> 16;
  18767. +  int xorv = c ^ sextc;
  18768. +
  18769. +  operands[4] = GEN_INT (xorv);
  18770. +  operands[5] = GEN_INT (sextc);
  18771. +}")
  18772. +
  18773. +(define_insn ""
  18774. +  [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
  18775. +    (compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "r")
  18776. +               (match_operand:SI 2 "reg_or_u_short_operand" "rK")))]
  18777. +  ""
  18778. +  "{cmpl%I2|cmplw%I2} %0,%1,%W2"
  18779. +  [(set_attr "type" "compare")])
  18780. +
  18781. +(define_insn ""
  18782. +  [(set (match_operand:CCUNS 0 "cc_reg_operand" "=y")
  18783. +    (compare:CCUNS (match_operand:DI 1 "gpc_reg_operand" "r")
  18784. +               (match_operand:DI 2 "reg_or_u_short_operand" "rK")))]
  18785. +  ""
  18786. +  "cmpld%I2 %0,%1,%W2"
  18787. +  [(set_attr "type" "compare")])
  18788. +
  18789. +;; The following two insns don't exist as single insns, but if we provide
  18790. +;; them, we can swap an add and compare, which will enable us to overlap more
  18791. +;; of the required delay between a compare and branch.  We generate code for
  18792. +;; them by splitting.
  18793. +
  18794. +(define_insn ""
  18795. +  [(set (match_operand:CC 3 "cc_reg_operand" "=y")
  18796. +    (compare:CC (match_operand:SI 1 "gpc_reg_operand" "r")
  18797. +            (match_operand:SI 2 "short_cint_operand" "i")))
  18798. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  18799. +    (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "i")))]
  18800. +  ""
  18801. +  "#"
  18802. +  [(set_attr "length" "8")])
  18803. +
  18804. +(define_insn ""
  18805. +  [(set (match_operand:CCUNS 3 "cc_reg_operand" "=y")
  18806. +    (compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "r")
  18807. +               (match_operand:SI 2 "u_short_cint_operand" "i")))
  18808. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  18809. +    (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "i")))]
  18810. +  ""
  18811. +  "#"
  18812. +  [(set_attr "length" "8")])
  18813. +
  18814. +(define_split
  18815. +  [(set (match_operand:CC 3 "cc_reg_operand" "")
  18816. +    (compare:CC (match_operand:SI 1 "gpc_reg_operand" "")
  18817. +            (match_operand:SI 2 "short_cint_operand" "")))
  18818. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18819. +    (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "")))]
  18820. +  ""
  18821. +  [(set (match_dup 3) (compare:CC (match_dup 1) (match_dup 2)))
  18822. +   (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
  18823. +
  18824. +(define_split
  18825. +  [(set (match_operand:CCUNS 3 "cc_reg_operand" "")
  18826. +    (compare:CCUNS (match_operand:SI 1 "gpc_reg_operand" "")
  18827. +               (match_operand:SI 2 "u_short_cint_operand" "")))
  18828. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  18829. +    (plus:SI (match_dup 1) (match_operand:SI 4 "short_cint_operand" "")))]
  18830. +  ""
  18831. +  [(set (match_dup 3) (compare:CCUNS (match_dup 1) (match_dup 2)))
  18832. +   (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 4)))])
  18833. +
  18834. +(define_insn ""
  18835. +  [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
  18836. +    (compare:CCFP (match_operand:SF 1 "gpc_reg_operand" "f")
  18837. +              (match_operand:SF 2 "gpc_reg_operand" "f")))]
  18838. +  "TARGET_HARD_FLOAT"
  18839. +  "fcmpu %0,%1,%2"
  18840. +  [(set_attr "type" "fpcompare")])
  18841. +
  18842. +(define_insn ""
  18843. +  [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
  18844. +    (compare:CCFP (match_operand:DF 1 "gpc_reg_operand" "f")
  18845. +              (match_operand:DF 2 "gpc_reg_operand" "f")))]
  18846. +  "TARGET_HARD_FLOAT"
  18847. +  "fcmpu %0,%1,%2"
  18848. +  [(set_attr "type" "fpcompare")])
  18849. +
  18850. +;; Now we have the scc insns.  We can do some combinations because of the
  18851. +;; way the machine works.
  18852. +;;
  18853. +;; Note that this is probably faster if we can put an insn between the
  18854. +;; mfcr and rlinm, but this is tricky.  Let's leave it for now.  In most
  18855. +;; cases the insns below which don't use an intermediate CR field will
  18856. +;; be used instead.
  18857. +(define_insn ""
  18858. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  18859. +    (match_operator:SI 1 "scc_comparison_operator"
  18860. +               [(match_operand 2 "cc_reg_operand" "y")
  18861. +                (const_int 0)]))]
  18862. +  ""
  18863. +  "%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%J1,1"
  18864. +  [(set_attr "length" "12")])
  18865. +
  18866. +(define_insn ""
  18867. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  18868. +    (compare:CC (match_operator:SI 1 "scc_comparison_operator"
  18869. +                       [(match_operand 2 "cc_reg_operand" "y")
  18870. +                    (const_int 0)])
  18871. +            (const_int 0)))
  18872. +   (set (match_operand:SI 3 "gpc_reg_operand" "=r")
  18873. +    (match_op_dup 1 [(match_dup 2) (const_int 0)]))]
  18874. +  "! TARGET_POWERPC64"
  18875. +  "%D1mfcr %3\;{rlinm.|rlwinm.} %3,%3,%J1,1"
  18876. +  [(set_attr "type" "delayed_compare")
  18877. +   (set_attr "length" "12")])
  18878. +
  18879. +(define_insn ""
  18880. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  18881. +    (ashift:SI (match_operator:SI 1 "scc_comparison_operator"
  18882. +                      [(match_operand 2 "cc_reg_operand" "y")
  18883. +                       (const_int 0)])
  18884. +           (match_operand:SI 3 "const_int_operand" "n")))]
  18885. +  ""
  18886. +  "*
  18887. +{
  18888. +  int is_bit = ccr_bit (operands[1], 1);
  18889. +  int put_bit = 31 - (INTVAL (operands[3]) & 31);
  18890. +  int count;
  18891. +
  18892. +  if (is_bit >= put_bit)
  18893. +    count = is_bit - put_bit;
  18894. +  else
  18895. +    count = 32 - (put_bit - is_bit);
  18896. +
  18897. +  operands[4] = GEN_INT (count);
  18898. +  operands[5] = GEN_INT (put_bit);
  18899. +
  18900. +  return \"%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%4,%5,%5\";
  18901. +}"
  18902. + [(set_attr "length" "12")])
  18903. +
  18904. +(define_insn ""
  18905. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  18906. +    (compare:CC
  18907. +     (ashift:SI (match_operator:SI 1 "scc_comparison_operator"
  18908. +                       [(match_operand 2 "cc_reg_operand" "y")
  18909. +                    (const_int 0)])
  18910. +            (match_operand:SI 3 "const_int_operand" "n"))
  18911. +     (const_int 0)))
  18912. +   (set (match_operand:SI 4 "gpc_reg_operand" "=r")
  18913. +    (ashift:SI (match_op_dup 1 [(match_dup 2) (const_int 0)])
  18914. +           (match_dup 3)))]
  18915. +  ""
  18916. +  "*
  18917. +{
  18918. +  int is_bit = ccr_bit (operands[1], 1);
  18919. +  int put_bit = 31 - (INTVAL (operands[3]) & 31);
  18920. +  int count;
  18921. +
  18922. +  if (is_bit >= put_bit)
  18923. +    count = is_bit - put_bit;
  18924. +  else
  18925. +    count = 32 - (put_bit - is_bit);
  18926. +
  18927. +  operands[5] = GEN_INT (count);
  18928. +  operands[6] = GEN_INT (put_bit);
  18929. +
  18930. +  return \"%D1mfcr %4\;{rlinm.|rlwinm.} %4,%4,%5,%6,%6\";
  18931. +}"
  18932. +  [(set_attr "type" "delayed_compare")
  18933. +   (set_attr "length" "12")])
  18934. +
  18935. +;; If we are comparing the result of two comparisons, this can be done
  18936. +;; using creqv or crxor.
  18937. +
  18938. +(define_insn ""
  18939. +  [(set (match_operand:CCEQ 0 "cc_reg_operand" "=y")
  18940. +    (compare:CCEQ (match_operator 1 "scc_comparison_operator"
  18941. +                  [(match_operand 2 "cc_reg_operand" "y")
  18942. +                   (const_int 0)])
  18943. +              (match_operator 3 "scc_comparison_operator"
  18944. +                  [(match_operand 4 "cc_reg_operand" "y")
  18945. +                   (const_int 0)])))]
  18946. +  "REGNO (operands[2]) != REGNO (operands[4])"
  18947. +  "*
  18948. +{
  18949. +  enum rtx_code code1, code2;
  18950. +
  18951. +  code1 = GET_CODE (operands[1]);
  18952. +  code2 = GET_CODE (operands[3]);
  18953. +
  18954. +  if ((code1 == EQ || code1 == LT || code1 == GT
  18955. +       || code1 == LTU || code1 == GTU
  18956. +       || (code1 != NE && GET_MODE (operands[2]) == CCFPmode))
  18957. +      !=
  18958. +      (code2 == EQ || code2 == LT || code2 == GT
  18959. +       || code2 == LTU || code2 == GTU
  18960. +       || (code2 != NE && GET_MODE (operands[4]) == CCFPmode)))
  18961. +    return \"%C1%C3crxor %E0,%j1,%j3\";
  18962. +  else
  18963. +    return \"%C1%C3creqv %E0,%j1,%j3\";
  18964. +}"
  18965. +  [(set_attr "length" "12")])
  18966. +
  18967. +;; There is a 3 cycle delay between consecutive mfcr instructions
  18968. +;; so it is useful to combine 2 scc instructions to use only one mfcr.
  18969. +
  18970. +(define_peephole
  18971. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  18972. +    (match_operator:SI 1 "scc_comparison_operator"
  18973. +               [(match_operand 2 "cc_reg_operand" "y")
  18974. +                (const_int 0)]))
  18975. +   (set (match_operand:SI 3 "gpc_reg_operand" "=r")
  18976. +    (match_operator:SI 4 "scc_comparison_operator"
  18977. +               [(match_operand 5 "cc_reg_operand" "y")
  18978. +                (const_int 0)]))]
  18979. +   "REGNO (operands[2]) != REGNO (operands[5])"
  18980. +   "%D1%D4mfcr %3\;{rlinm|rlwinm} %0,%3,%J1,1\;{rlinm|rlwinm} %3,%3,%J4,1"
  18981. +   [(set_attr "length" "20")])
  18982. +
  18983. +;; There are some scc insns that can be done directly, without a compare.
  18984. +;; These are faster because they don't involve the communications between
  18985. +;; the FXU and branch units.   In fact, we will be replacing all of the
  18986. +;; integer scc insns here or in the portable methods in emit_store_flag.
  18987. +;;
  18988. +;; Also support (neg (scc ..)) since that construct is used to replace
  18989. +;; branches, (plus (scc ..) ..) since that construct is common and
  18990. +;; takes no more insns than scc, and (and (neg (scc ..)) ..) in the
  18991. +;; cases where it is no more expensive than (neg (scc ..)).
  18992. +
  18993. +;; Have reload force a constant into a register for the simple insns that
  18994. +;; otherwise won't accept constants.  We do this because it is faster than
  18995. +;; the cmp/mfcr sequence we would otherwise generate.
  18996. +
  18997. +(define_insn ""
  18998. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
  18999. +    (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19000. +           (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I")))
  19001. +   (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
  19002. +  "! TARGET_POWERPC64"
  19003. +  "@
  19004. +   xor %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
  19005. +   {sfi|subfic} %3,%1,0\;{ae|adde} %0,%3,%1
  19006. +   {xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
  19007. +   {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0
  19008. +   {sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae|adde} %0,%3,%0"
  19009. +  [(set_attr "length" "12,8,12,12,12")])
  19010. +
  19011. +(define_insn ""
  19012. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r")
  19013. +    (eq:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19014. +           (match_operand:DI 2 "reg_or_cint_operand" "r,O,K,J,I")))
  19015. +   (clobber (match_scratch:DI 3 "=r,&r,r,r,r"))]
  19016. +  "TARGET_POWERPC64"
  19017. +  "@
  19018. +   xor %0,%1,%2\;subfic %3,%0,0\;adde %0,%3,%0
  19019. +   subfic %3,%1,0\;adde %0,%3,%1
  19020. +   xori %0,%1,%b2\;subfic %3,%0,0\;adde %0,%3,%0
  19021. +   xoris %0,%1,%u2\;subfic %3,%0,0\;adde %0,%3,%0
  19022. +   subfic %0,%1,%2\;subfic %3,%0,0\;adde %0,%3,%0"
  19023. +  [(set_attr "length" "12,8,12,12,12")])
  19024. +
  19025. +(define_insn ""
  19026. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x")
  19027. +    (compare:CC
  19028. +     (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19029. +        (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
  19030. +     (const_int 0)))
  19031. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
  19032. +    (eq:SI (match_dup 1) (match_dup 2)))
  19033. +   (clobber (match_scratch:SI 3 "=r,&r,r,r,r"))]
  19034. +  "! TARGET_POWERPC64"
  19035. +  "@
  19036. +   xor %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0
  19037. +   {sfi|subfic} %3,%1,0\;{ae.|adde.} %0,%3,%1
  19038. +   {xoril|xori} %0,%1,%b2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0
  19039. +   {xoriu|xoris} %0,%1,%u2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0
  19040. +   {sfi|subfic} %0,%1,%2\;{sfi|subfic} %3,%0,0\;{ae.|adde.} %0,%3,%0"
  19041. +  [(set_attr "type" "compare")
  19042. +   (set_attr "length" "12,8,12,12,12")])
  19043. +
  19044. +(define_insn ""
  19045. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x,x,x,x,x")
  19046. +    (compare:CC
  19047. +     (eq:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19048. +        (match_operand:DI 2 "reg_or_cint_operand" "r,O,K,J,I"))
  19049. +     (const_int 0)))
  19050. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,r,r")
  19051. +    (eq:DI (match_dup 1) (match_dup 2)))
  19052. +   (clobber (match_scratch:DI 3 "=r,&r,r,r,r"))]
  19053. +  "TARGET_POWERPC64"
  19054. +  "@
  19055. +   xor %0,%1,%2\;subfic %3,%0,0\;adde. %0,%3,%0
  19056. +   subfic %3,%1,0\;adde. %0,%3,%1
  19057. +   xori %0,%1,%b2\;subfic %3,%0,0\;adde. %0,%3,%0
  19058. +   xoris %0,%1,%u2\;subfic %3,%0,0\;adde. %0,%3,%0
  19059. +   subfic %0,%1,%2\;subfic %3,%0,0\;adde. %0,%3,%0"
  19060. +  [(set_attr "type" "compare")
  19061. +   (set_attr "length" "12,8,12,12,12")])
  19062. +
  19063. +;; We have insns of the form shown by the first define_insn below.  If
  19064. +;; there is something inside the comparison operation, we must split it.
  19065. +(define_split
  19066. +  [(set (match_operand:SI 0 "gpc_reg_operand" "")
  19067. +    (plus:SI (match_operator 1 "comparison_operator"
  19068. +                 [(match_operand:SI 2 "" "")
  19069. +                  (match_operand:SI 3
  19070. +                            "reg_or_cint_operand" "")])
  19071. +         (match_operand:SI 4 "gpc_reg_operand" "")))
  19072. +   (clobber (match_operand:SI 5 "register_operand" ""))]
  19073. +  "! gpc_reg_operand (operands[2], SImode)"
  19074. +  [(set (match_dup 5) (match_dup 2))
  19075. +   (set (match_dup 2) (plus:SI (match_op_dup 1 [(match_dup 2) (match_dup 3)])
  19076. +                   (match_dup 4)))])
  19077. +
  19078. +(define_insn ""
  19079. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
  19080. +    (plus:SI (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19081. +            (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
  19082. +         (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r")))
  19083. +   (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
  19084. +  "! TARGET_POWERPC64"
  19085. +  "@
  19086. +   xor %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
  19087. +   {sfi|subfic} %4,%1,0\;{aze|addze} %0,%3
  19088. +   {xoril|xori} %4,%1,%b2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
  19089. +   {xoriu|xoris} %4,%1,%u2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
  19090. +   {sfi|subfic} %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3"
  19091. +  [(set_attr "length" "12,8,12,12,12")])
  19092. +
  19093. +(define_insn ""
  19094. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x,x,x,x")
  19095. +    (compare:CC
  19096. +     (plus:SI
  19097. +      (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19098. +         (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
  19099. +      (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r"))
  19100. +     (const_int 0)))
  19101. +   (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
  19102. +  "! TARGET_POWERPC64"
  19103. +  "@
  19104. +   xor %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
  19105. +   {sfi|subfic} %4,%1,0\;{aze.|addze.} %4,%3
  19106. +   {xoril|xori} %4,%1,%b2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
  19107. +   {xoriu|xoris} %4,%1,%u2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
  19108. +   {sfi|subfic} %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3"
  19109. +  [(set_attr "type" "compare")
  19110. +   (set_attr "length" "12,8,12,12,12")])
  19111. +
  19112. +(define_insn ""
  19113. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x,x,x,x")
  19114. +    (compare:CC
  19115. +     (plus:SI
  19116. +      (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19117. +         (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))
  19118. +      (match_operand:SI 3 "gpc_reg_operand" "r,r,r,r,r"))
  19119. +     (const_int 0)))
  19120. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
  19121. +    (plus:SI (eq:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19122. +   (clobber (match_scratch:SI 4 "=&r,&r,&r,&r,&r"))]
  19123. +  "! TARGET_POWERPC64"
  19124. +  "@
  19125. +   xor %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
  19126. +   {sfi|subfic} %4,%1,0\;{aze.|addze.} %0,%3
  19127. +   {xoril|xori} %4,%1,%b2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
  19128. +   {xoriu|xoris} %4,%1,%u2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
  19129. +   {sfi|subfic} %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3"
  19130. +  [(set_attr "type" "compare")
  19131. +   (set_attr "length" "12,8,12,12,12")])
  19132. +
  19133. +(define_insn ""
  19134. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r,r,r")
  19135. +    (neg:SI (eq:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r,r,r,r")
  19136. +               (match_operand:SI 2 "reg_or_cint_operand" "r,O,K,J,I"))))]
  19137. +  "! TARGET_POWERPC64"
  19138. +  "@
  19139. +   xor %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
  19140. +   {ai|addic} %0,%1,-1\;{sfe|subfe} %0,%0,%0
  19141. +   {xoril|xori} %0,%1,%b2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
  19142. +   {xoriu|xoris} %0,%1,%u2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
  19143. +   {sfi|subfic} %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0"
  19144. +   [(set_attr "length" "12,8,12,12,12")])
  19145. +
  19146. +;; Simplify (ne X (const_int 0)) on the PowerPC.  No need to on the Power,
  19147. +;; since it nabs/sr is just as fast.
  19148. +(define_insn "*ne0"
  19149. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=&r")
  19150. +    (lshiftrt:SI (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
  19151. +             (const_int 31)))
  19152. +   (clobber (match_scratch:SI 2 "=&r"))]
  19153. +  "! TARGET_POWER && ! TARGET_POWERPC64"
  19154. +  "{ai|addic} %2,%1,-1\;{sfe|subfe} %0,%2,%1"
  19155. +  [(set_attr "length" "8")])
  19156. +
  19157. +(define_insn ""
  19158. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19159. +    (lshiftrt:DI (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
  19160. +             (const_int 63)))
  19161. +   (clobber (match_scratch:DI 2 "=&r"))]
  19162. +  "TARGET_POWERPC64"
  19163. +  "addic %2,%1,-1\;subfe %0,%2,%1"
  19164. +  [(set_attr "length" "8")])
  19165. +
  19166. +;; This is what (plus (ne X (const_int 0)) Y) looks like.
  19167. +(define_insn ""
  19168. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19169. +    (plus:SI (lshiftrt:SI
  19170. +          (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
  19171. +          (const_int 31))
  19172. +         (match_operand:SI 2 "gpc_reg_operand" "r")))
  19173. +   (clobber (match_scratch:SI 3 "=&r"))]
  19174. +  "! TARGET_POWERPC64"
  19175. +  "{ai|addic} %3,%1,-1\;{aze|addze} %0,%2"
  19176. +  [(set_attr "length" "8")])
  19177. +
  19178. +(define_insn ""
  19179. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19180. +    (plus:DI (lshiftrt:DI
  19181. +          (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
  19182. +          (const_int 63))
  19183. +         (match_operand:DI 2 "gpc_reg_operand" "r")))
  19184. +   (clobber (match_scratch:DI 3 "=&r"))]
  19185. +  "TARGET_POWERPC64"
  19186. +  "addic %3,%1,-1\;addze %0,%2"
  19187. +  [(set_attr "length" "8")])
  19188. +
  19189. +(define_insn ""
  19190. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19191. +    (compare:CC
  19192. +     (plus:SI (lshiftrt:SI
  19193. +           (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
  19194. +           (const_int 31))
  19195. +          (match_operand:SI 2 "gpc_reg_operand" "r"))
  19196. +     (const_int 0)))
  19197. +   (clobber (match_scratch:SI 3 "=&r"))]
  19198. +  "! TARGET_POWERPC64"
  19199. +  "{ai|addic} %3,%1,-1\;{aze.|addze.} %3,%2"
  19200. +  [(set_attr "type" "compare")
  19201. +   (set_attr "length" "8")])
  19202. +
  19203. +(define_insn ""
  19204. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19205. +    (compare:CC
  19206. +     (plus:DI (lshiftrt:DI
  19207. +           (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
  19208. +           (const_int 63))
  19209. +          (match_operand:DI 2 "gpc_reg_operand" "r"))
  19210. +     (const_int 0)))
  19211. +   (clobber (match_scratch:DI 3 "=&r"))]
  19212. +  "TARGET_POWERPC64"
  19213. +  "addic %3,%1,-1\;addze. %3,%2"
  19214. +  [(set_attr "type" "compare")
  19215. +   (set_attr "length" "8")])
  19216. +
  19217. +(define_insn ""
  19218. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  19219. +    (compare:CC
  19220. +     (plus:SI (lshiftrt:SI
  19221. +           (neg:SI (abs:SI (match_operand:SI 1 "gpc_reg_operand" "r")))
  19222. +           (const_int 31))
  19223. +          (match_operand:SI 2 "gpc_reg_operand" "r"))
  19224. +     (const_int 0)))
  19225. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19226. +    (plus:SI (lshiftrt:SI (neg:SI (abs:SI (match_dup 1))) (const_int 31))
  19227. +         (match_dup 2)))
  19228. +   (clobber (match_scratch:SI 3 "=&r"))]
  19229. +  "! TARGET_POWERPC64"
  19230. +  "{ai|addic} %3,%1,-1\;{aze.|addze.} %0,%2"
  19231. +  [(set_attr "type" "compare")
  19232. +   (set_attr "length" "8")])
  19233. +
  19234. +(define_insn ""
  19235. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  19236. +    (compare:CC
  19237. +     (plus:DI (lshiftrt:DI
  19238. +           (neg:DI (abs:DI (match_operand:DI 1 "gpc_reg_operand" "r")))
  19239. +           (const_int 63))
  19240. +          (match_operand:DI 2 "gpc_reg_operand" "r"))
  19241. +     (const_int 0)))
  19242. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19243. +    (plus:DI (lshiftrt:DI (neg:DI (abs:DI (match_dup 1))) (const_int 63))
  19244. +         (match_dup 2)))
  19245. +   (clobber (match_scratch:DI 3 "=&r"))]
  19246. +  "TARGET_POWERPC64"
  19247. +  "addic %3,%1,-1\;addze. %0,%2"
  19248. +  [(set_attr "type" "compare")
  19249. +   (set_attr "length" "8")])
  19250. +
  19251. +(define_insn ""
  19252. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19253. +    (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19254. +           (match_operand:SI 2 "reg_or_short_operand" "r,O")))
  19255. +   (clobber (match_scratch:SI 3 "=r,X"))]
  19256. +  "TARGET_POWER"
  19257. +  "@
  19258. +   doz %3,%2,%1\;{sfi|subfic} %0,%3,0\;{ae|adde} %0,%0,%3
  19259. +   {ai|addic} %0,%1,-1\;{aze|addze} %0,%0\;{sri|srwi} %0,%0,31"
  19260. +  [(set_attr "length" "12")])
  19261. +
  19262. +(define_insn ""
  19263. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x,x")
  19264. +    (compare:CC
  19265. +     (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19266. +        (match_operand:SI 2 "reg_or_short_operand" "r,O"))
  19267. +     (const_int 0)))
  19268. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19269. +    (le:SI (match_dup 1) (match_dup 2)))
  19270. +   (clobber (match_scratch:SI 3 "=r,X"))]
  19271. +  "TARGET_POWER"
  19272. +  "@
  19273. +   doz %3,%2,%1\;{sfi|subfic} %0,%3,0\;{ae.|adde.} %0,%0,%3
  19274. +   {ai|addic} %0,%1,-1\;{aze|addze} %0,%0\;{sri.|srwi.} %0,%0,31"
  19275. +  [(set_attr "type" "compare,delayed_compare")
  19276. +   (set_attr "length" "12")])
  19277. +
  19278. +(define_insn ""
  19279. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19280. +    (plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19281. +            (match_operand:SI 2 "reg_or_short_operand" "r,O"))
  19282. +         (match_operand:SI 3 "gpc_reg_operand" "r,r")))
  19283. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19284. +  "TARGET_POWER"
  19285. +  "@
  19286. +   doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3
  19287. +   {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze|addze} %0,%3"
  19288. +  [(set_attr "length" "12")])
  19289. +
  19290. +(define_insn ""
  19291. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  19292. +    (compare:CC
  19293. +     (plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19294. +             (match_operand:SI 2 "reg_or_short_operand" "r,O"))
  19295. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19296. +     (const_int 0)))
  19297. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19298. +  "TARGET_POWER"
  19299. +  "@
  19300. +   doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3
  19301. +   {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze.|addze.} %4,%3"
  19302. +  [(set_attr "type" "compare")
  19303. +   (set_attr "length" "12")])
  19304. +
  19305. +(define_insn ""
  19306. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
  19307. +    (compare:CC
  19308. +     (plus:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19309. +             (match_operand:SI 2 "reg_or_short_operand" "r,O"))
  19310. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19311. +     (const_int 0)))
  19312. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19313. +    (plus:SI (le:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19314. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19315. +  "TARGET_POWER"
  19316. +  "@
  19317. +   doz %4,%2,%1\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3
  19318. +   {srai|srawi} %4,%1,31\;{sf|subfc} %4,%1,%4\;{aze.|addze.} %0,%3"
  19319. +  [(set_attr "type" "compare")
  19320. +   (set_attr "length" "12")])
  19321. +
  19322. +(define_insn ""
  19323. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19324. +    (neg:SI (le:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19325. +               (match_operand:SI 2 "reg_or_short_operand" "r,O"))))]
  19326. +  "TARGET_POWER"
  19327. +  "@
  19328. +   doz %0,%2,%1\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0
  19329. +   {ai|addic} %0,%1,-1\;{aze|addze} %0,%0\;{srai|srawi} %0,%0,31"
  19330. +  [(set_attr "length" "12")])
  19331. +
  19332. +(define_insn ""
  19333. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19334. +    (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19335. +        (match_operand:SI 2 "reg_or_short_operand" "rI")))]
  19336. +  "! TARGET_POWERPC64"
  19337. +  "{sf%I2|subf%I2c} %0,%1,%2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0"
  19338. +  [(set_attr "length" "12")])
  19339. +
  19340. +(define_insn ""
  19341. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19342. +    (leu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  19343. +        (match_operand:DI 2 "reg_or_short_operand" "rI")))]
  19344. +  "TARGET_POWERPC64"
  19345. +  "subf%I2c %0,%1,%2\;li %0,0\;adde %0,%0,%0"
  19346. +  [(set_attr "length" "12")])
  19347. +
  19348. +(define_insn ""
  19349. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  19350. +    (compare:CC
  19351. +     (leu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  19352. +         (match_operand:DI 2 "reg_or_short_operand" "rI"))
  19353. +     (const_int 0)))
  19354. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19355. +    (leu:DI (match_dup 1) (match_dup 2)))]
  19356. +  "TARGET_POWERPC64"
  19357. +  "subf%I2c %0,%1,%2\;li %0,0\;adde. %0,%0,%0"
  19358. +  [(set_attr "type" "compare")
  19359. +   (set_attr "length" "12")])
  19360. +
  19361. +(define_insn ""
  19362. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  19363. +    (compare:CC
  19364. +     (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19365. +         (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19366. +     (const_int 0)))
  19367. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19368. +    (leu:SI (match_dup 1) (match_dup 2)))]
  19369. +  "! TARGET_POWERPC64"
  19370. +  "{sf%I2|subf%I2c} %0,%1,%2\;{cal %0,0(0)|li %0,0}\;{ae.|adde.} %0,%0,%0"
  19371. +  [(set_attr "type" "compare")
  19372. +   (set_attr "length" "12")])
  19373. +
  19374. +(define_insn ""
  19375. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  19376. +    (compare:CC
  19377. +     (leu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  19378. +         (match_operand:DI 2 "reg_or_short_operand" "rI"))
  19379. +     (const_int 0)))
  19380. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19381. +    (leu:DI (match_dup 1) (match_dup 2)))]
  19382. +  "TARGET_POWERPC64"
  19383. +  "subf%I2c %0,%1,%2\;li %0,0\;adde. %0,%0,%0"
  19384. +  [(set_attr "type" "compare")
  19385. +   (set_attr "length" "12")])
  19386. +
  19387. +(define_insn ""
  19388. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19389. +    (plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19390. +             (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19391. +         (match_operand:SI 3 "gpc_reg_operand" "r")))
  19392. +   (clobber (match_scratch:SI 4 "=&r"))]
  19393. +  "! TARGET_POWERPC64"
  19394. +  "{sf%I2|subf%I2c} %4,%1,%2\;{aze|addze} %0,%3"
  19395. +  [(set_attr "length" "8")])
  19396. +
  19397. +(define_insn ""
  19398. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19399. +    (compare:CC
  19400. +     (plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19401. +              (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19402. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  19403. +     (const_int 0)))
  19404. +   (clobber (match_scratch:SI 4 "=&r"))]
  19405. +  "! TARGET_POWERPC64"
  19406. +  "{sf%I2|subf%I2c} %4,%1,%2\;{aze.|addze.} %4,%3"
  19407. +  [(set_attr "type" "compare")
  19408. +   (set_attr "length" "8")])
  19409. +
  19410. +(define_insn ""
  19411. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x")
  19412. +    (compare:CC
  19413. +     (plus:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19414. +              (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19415. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  19416. +     (const_int 0)))
  19417. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19418. +    (plus:SI (leu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19419. +   (clobber (match_scratch:SI 4 "=&r"))]
  19420. +  "! TARGET_POWERPC64"
  19421. +  "{sf%I2|subf%I2c} %4,%1,%2\;{aze.|addze.} %0,%3"
  19422. +  [(set_attr "type" "compare")
  19423. +   (set_attr "length" "8")])
  19424. +
  19425. +(define_insn ""
  19426. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19427. +    (neg:SI (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19428. +            (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
  19429. +  "! TARGET_POWERPC64"
  19430. +  "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0"
  19431. +   [(set_attr "length" "12")])
  19432. +
  19433. +(define_insn ""
  19434. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19435. +    (and:SI (neg:SI
  19436. +         (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19437. +             (match_operand:SI 2 "reg_or_short_operand" "rI")))
  19438. +        (match_operand:SI 3 "gpc_reg_operand" "r")))
  19439. +   (clobber (match_scratch:SI 4 "=&r"))]
  19440. +  "! TARGET_POWERPC64"
  19441. +  "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4"
  19442. +  [(set_attr "length" "12")])
  19443. +
  19444. +(define_insn ""
  19445. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19446. +    (compare:CC
  19447. +     (and:SI (neg:SI
  19448. +          (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19449. +              (match_operand:SI 2 "reg_or_short_operand" "rI")))
  19450. +         (match_operand:SI 3 "gpc_reg_operand" "r"))
  19451. +     (const_int 0)))
  19452. +   (clobber (match_scratch:SI 4 "=&r"))]
  19453. +  "! TARGET_POWERPC64"
  19454. +  "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc. %4,%3,%4"
  19455. +  [(set_attr "type" "compare")
  19456. +   (set_attr "length" "12")])
  19457. +
  19458. +(define_insn ""
  19459. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x")
  19460. +    (compare:CC
  19461. +     (and:SI (neg:SI
  19462. +          (leu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19463. +              (match_operand:SI 2 "reg_or_short_operand" "rI")))
  19464. +         (match_operand:SI 3 "gpc_reg_operand" "r"))
  19465. +     (const_int 0)))
  19466. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19467. +    (and:SI (neg:SI (leu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
  19468. +   (clobber (match_scratch:SI 4 "=&r"))]
  19469. +  "! TARGET_POWERPC64"
  19470. +  "{sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4"
  19471. +  [(set_attr "type" "compare")
  19472. +   (set_attr "length" "12")])
  19473. +
  19474. +(define_insn ""
  19475. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19476. +    (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19477. +           (match_operand:SI 2 "reg_or_short_operand" "rI")))]
  19478. +  "TARGET_POWER"
  19479. +  "doz%I2 %0,%1,%2\;nabs %0,%0\;{sri|srwi} %0,%0,31"
  19480. +   [(set_attr "length" "12")])
  19481. +
  19482. +(define_insn ""
  19483. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  19484. +    (compare:CC
  19485. +     (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19486. +        (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19487. +     (const_int 0)))
  19488. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19489. +    (lt:SI (match_dup 1) (match_dup 2)))]
  19490. +  "TARGET_POWER"
  19491. +  "doz%I2 %0,%1,%2\;nabs %0,%0\;{sri.|srwi.} %0,%0,31"
  19492. +  [(set_attr "type" "delayed_compare")
  19493. +   (set_attr "length" "12")])
  19494. +
  19495. +(define_insn ""
  19496. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19497. +    (plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19498. +            (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19499. +         (match_operand:SI 3 "gpc_reg_operand" "r")))
  19500. +   (clobber (match_scratch:SI 4 "=&r"))]
  19501. +  "TARGET_POWER"
  19502. +  "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze|addze} %0,%3"
  19503. +  [(set_attr "length" "12")])
  19504. +
  19505. +(define_insn ""
  19506. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19507. +    (compare:CC
  19508. +     (plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19509. +             (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19510. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  19511. +     (const_int 0)))
  19512. +   (clobber (match_scratch:SI 4 "=&r"))]
  19513. +  "TARGET_POWER"
  19514. +  "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze.|addze.} %4,%3"
  19515. +  [(set_attr "type" "compare")
  19516. +   (set_attr "length" "12")])
  19517. +
  19518. +(define_insn ""
  19519. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x")
  19520. +    (compare:CC
  19521. +     (plus:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19522. +             (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19523. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  19524. +     (const_int 0)))
  19525. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19526. +    (plus:SI (lt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19527. +   (clobber (match_scratch:SI 4 "=&r"))]
  19528. +  "TARGET_POWER"
  19529. +  "doz%I2 %4,%1,%2\;{ai|addic} %4,%4,-1\;{aze.|addze.} %0,%3"
  19530. +  [(set_attr "type" "compare")
  19531. +   (set_attr "length" "12")])
  19532. +
  19533. +(define_insn ""
  19534. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19535. +    (neg:SI (lt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19536. +               (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
  19537. +  "TARGET_POWER"
  19538. +  "doz%I2 %0,%1,%2\;nabs %0,%0\;{srai|srawi} %0,%0,31"
  19539. +  [(set_attr "length" "12")])
  19540. +
  19541. +(define_insn ""
  19542. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19543. +    (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19544. +        (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))]
  19545. +  "! TARGET_POWERPC64"
  19546. +  "@
  19547. +   {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;neg %0,%0
  19548. +   {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;neg %0,%0"
  19549. +  [(set_attr "length" "12")])
  19550. +
  19551. +(define_insn ""
  19552. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  19553. +    (compare:CC
  19554. +     (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19555. +         (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19556. +     (const_int 0)))
  19557. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19558. +    (ltu:SI (match_dup 1) (match_dup 2)))]
  19559. +  "! TARGET_POWERPC64"
  19560. +  "@
  19561. +   {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;neg. %0,%0
  19562. +   {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0\;neg. %0,%0"
  19563. +  [(set_attr "type" "compare")
  19564. +   (set_attr "length" "12")])
  19565. +
  19566. +(define_insn ""
  19567. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19568. +    (plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19569. +             (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19570. +         (match_operand:SI 3 "reg_or_short_operand" "rI,rI")))
  19571. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19572. +  "! TARGET_POWERPC64"
  19573. +  "@
  19574. +  {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf%I3|subf%I3c} %0,%4,%3
  19575. +  {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf%I3|subf%I3c} %0,%4,%3"
  19576. + [(set_attr "length" "12")])
  19577. +
  19578. +(define_insn ""
  19579. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  19580. +    (compare:CC
  19581. +     (plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19582. +              (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19583. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19584. +     (const_int 0)))
  19585. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19586. +  "! TARGET_POWERPC64"
  19587. +  "@
  19588. +   {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %4,%4,%3
  19589. +   {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %4,%4,%3"
  19590. +  [(set_attr "type" "compare")
  19591. +   (set_attr "length" "12")])
  19592. +
  19593. +(define_insn ""
  19594. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
  19595. +    (compare:CC
  19596. +     (plus:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19597. +              (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19598. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19599. +     (const_int 0)))
  19600. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19601. +    (plus:SI (ltu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19602. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19603. +  "! TARGET_POWERPC64"
  19604. +  "@
  19605. +   {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3
  19606. +   {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3"
  19607. +  [(set_attr "type" "compare")
  19608. +   (set_attr "length" "12")])
  19609. +
  19610. +(define_insn ""
  19611. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19612. +    (neg:SI (ltu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19613. +            (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))))]
  19614. +  "! TARGET_POWERPC64"
  19615. +  "@
  19616. +   {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0
  19617. +   {ai|addic} %0,%1,%n2\;{sfe|subfe} %0,%0,%0"
  19618. +  [(set_attr "length" "8")])
  19619. +
  19620. +(define_insn ""
  19621. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19622. +    (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19623. +           (match_operand:SI 2 "reg_or_short_operand" "rI")))
  19624. +   (clobber (match_scratch:SI 3 "=r"))]
  19625. +  "TARGET_POWER"
  19626. +  "doz%I2 %3,%1,%2\;{sfi|subfic} %0,%3,0\;{ae|adde} %0,%0,%3"
  19627. +   [(set_attr "length" "12")])
  19628. +
  19629. +(define_insn ""
  19630. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  19631. +    (compare:CC
  19632. +     (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19633. +        (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19634. +     (const_int 0)))
  19635. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19636. +    (ge:SI (match_dup 1) (match_dup 2)))
  19637. +   (clobber (match_scratch:SI 3 "=r"))]
  19638. +  "TARGET_POWER"
  19639. +  "doz%I2 %3,%1,%2\;{sfi|subfic} %0,%3,0\;{ae.|adde.} %0,%0,%3"
  19640. +  [(set_attr "type" "compare")
  19641. +   (set_attr "length" "12")])
  19642. +
  19643. +(define_insn ""
  19644. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19645. +    (plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19646. +            (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19647. +         (match_operand:SI 3 "gpc_reg_operand" "r")))
  19648. +   (clobber (match_scratch:SI 4 "=&r"))]
  19649. +  "TARGET_POWER"
  19650. +  "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze|addze} %0,%3"
  19651. +  [(set_attr "length" "12")])
  19652. +
  19653. +(define_insn ""
  19654. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19655. +    (compare:CC
  19656. +     (plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19657. +             (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19658. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  19659. +     (const_int 0)))
  19660. +   (clobber (match_scratch:SI 4 "=&r"))]
  19661. +  "TARGET_POWER"
  19662. +  "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %4,%3"
  19663. +  [(set_attr "type" "compare")
  19664. +   (set_attr "length" "12")])
  19665. +
  19666. +(define_insn ""
  19667. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x")
  19668. +    (compare:CC
  19669. +     (plus:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19670. +             (match_operand:SI 2 "reg_or_short_operand" "rI"))
  19671. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  19672. +     (const_int 0)))
  19673. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19674. +    (plus:SI (ge:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19675. +   (clobber (match_scratch:SI 4 "=&r"))]
  19676. +  "TARGET_POWER"
  19677. +  "doz%I2 %4,%1,%2\;{sfi|subfic} %4,%4,0\;{aze.|addze.} %0,%3"
  19678. +  [(set_attr "type" "compare")
  19679. +   (set_attr "length" "12")])
  19680. +
  19681. +(define_insn ""
  19682. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19683. +    (neg:SI (ge:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19684. +               (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
  19685. +  "TARGET_POWER"
  19686. +  "doz%I2 %0,%1,%2\;{ai|addic} %0,%0,-1\;{sfe|subfe} %0,%0,%0"
  19687. +  [(set_attr "length" "12")])
  19688. +
  19689. +;; This is (and (neg (ge X (const_int 0))) Y).
  19690. +;; srawi sign-extends, so these patterrns are 64-bit safe.
  19691. +(define_insn ""
  19692. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19693. +    (and:SI (neg:SI
  19694. +         (lshiftrt:SI
  19695. +          (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  19696. +          (const_int 31)))
  19697. +        (match_operand:SI 2 "gpc_reg_operand" "r")))
  19698. +   (clobber (match_scratch:SI 3 "=&r"))]
  19699. +  ""
  19700. +  "{srai|srawi} %3,%1,31\;andc %0,%2,%3"
  19701. +  [(set_attr "length" "8")])
  19702. +
  19703. +(define_insn ""
  19704. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19705. +    (and:DI (neg:DI
  19706. +         (lshiftrt:DI
  19707. +          (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  19708. +          (const_int 63)))
  19709. +        (match_operand:DI 2 "gpc_reg_operand" "r")))
  19710. +   (clobber (match_scratch:DI 3 "=&r"))]
  19711. +  "TARGET_POWERPC64"
  19712. +  "sradi %3,%1,63\;andc %0,%2,%3"
  19713. +  [(set_attr "length" "8")])
  19714. +
  19715. +(define_insn ""
  19716. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19717. +    (compare:CC
  19718. +     (and:SI (neg:SI
  19719. +          (lshiftrt:SI
  19720. +           (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  19721. +           (const_int 31)))
  19722. +         (match_operand:SI 2 "gpc_reg_operand" "r"))
  19723. +     (const_int 0)))
  19724. +   (clobber (match_scratch:SI 3 "=&r"))]
  19725. +  ""
  19726. +  "{srai|srawi} %3,%1,31\;andc. %3,%2,%3"
  19727. +  [(set_attr "type" "compare")
  19728. +   (set_attr "length" "8")])
  19729. +
  19730. +(define_insn ""
  19731. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  19732. +    (compare:CC
  19733. +     (and:DI (neg:DI
  19734. +          (lshiftrt:DI
  19735. +           (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  19736. +           (const_int 63)))
  19737. +         (match_operand:DI 2 "gpc_reg_operand" "r"))
  19738. +     (const_int 0)))
  19739. +   (clobber (match_scratch:DI 3 "=&r"))]
  19740. +  "TARGET_POWERPC64"
  19741. +  "sradi %3,%1,63\;andc. %3,%2,%3"
  19742. +  [(set_attr "type" "compare")
  19743. +   (set_attr "length" "8")])
  19744. +
  19745. +(define_insn ""
  19746. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  19747. +    (compare:CC
  19748. +     (and:SI (neg:SI
  19749. +          (lshiftrt:SI
  19750. +           (not:SI (match_operand:SI 1 "gpc_reg_operand" "r"))
  19751. +           (const_int 31)))
  19752. +         (match_operand:SI 2 "gpc_reg_operand" "r"))
  19753. +     (const_int 0)))
  19754. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19755. +    (and:SI (neg:SI (lshiftrt:SI (not:SI (match_dup 1))
  19756. +                     (const_int 31)))
  19757. +        (match_dup 2)))
  19758. +   (clobber (match_scratch:SI 3 "=&r"))]
  19759. +  ""
  19760. +  "{srai|srawi} %3,%1,31\;andc. %0,%2,%3"
  19761. +  [(set_attr "type" "compare")
  19762. +   (set_attr "length" "8")])
  19763. +
  19764. +(define_insn ""
  19765. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  19766. +    (compare:CC
  19767. +     (and:DI (neg:DI
  19768. +          (lshiftrt:DI
  19769. +           (not:DI (match_operand:DI 1 "gpc_reg_operand" "r"))
  19770. +           (const_int 63)))
  19771. +         (match_operand:DI 2 "gpc_reg_operand" "r"))
  19772. +     (const_int 0)))
  19773. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19774. +    (and:DI (neg:DI (lshiftrt:SI (not:DI (match_dup 1))
  19775. +                     (const_int 63)))
  19776. +        (match_dup 2)))
  19777. +   (clobber (match_scratch:SI 3 "=&r"))]
  19778. +  "TARGET_POWERPC64"
  19779. +  "sradi %3,%1,63\;andc. %0,%2,%3"
  19780. +  [(set_attr "type" "compare")
  19781. +   (set_attr "length" "8")])
  19782. +
  19783. +(define_insn ""
  19784. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19785. +    (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19786. +        (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))]
  19787. +  "! TARGET_POWERPC64"
  19788. +  "@
  19789. +   {sf|subfc} %0,%2,%1\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0
  19790. +   {ai|addic} %0,%1,%n2\;{cal %0,0(0)|li %0,0}\;{ae|adde} %0,%0,%0"
  19791. +  [(set_attr "length" "12")])
  19792. +
  19793. +(define_insn ""
  19794. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  19795. +    (geu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
  19796. +        (match_operand:DI 2 "reg_or_neg_short_operand" "r,P")))]
  19797. +  "TARGET_POWERPC64"
  19798. +  "@
  19799. +   subfc %0,%2,%1\;li %0,0\;adde %0,%0,%0
  19800. +   addic %0,%1,%n2\;li %0,0\;adde %0,%0,%0"
  19801. +  [(set_attr "length" "12")])
  19802. +
  19803. +(define_insn ""
  19804. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  19805. +    (compare:CC
  19806. +     (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19807. +         (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19808. +     (const_int 0)))
  19809. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19810. +    (geu:SI (match_dup 1) (match_dup 2)))]
  19811. +  "! TARGET_POWERPC64"
  19812. +  "@
  19813. +   {sf|subfc} %0,%2,%1\;{cal %0,0(0)|li %0,0}\;{ae.|adde.} %0,%0,%0
  19814. +   {ai|addic} %0,%1,%n2\;{cal %0,0(0)|li %0,0}\;{ae.|adde.} %0,%0,%0"
  19815. +  [(set_attr "type" "compare")
  19816. +   (set_attr "length" "12")])
  19817. +
  19818. +(define_insn ""
  19819. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")
  19820. +    (compare:CC
  19821. +     (geu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
  19822. +         (match_operand:DI 2 "reg_or_neg_short_operand" "r,P"))
  19823. +     (const_int 0)))
  19824. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  19825. +    (geu:DI (match_dup 1) (match_dup 2)))]
  19826. +  "TARGET_POWERPC64"
  19827. +  "@
  19828. +   subfc %0,%2,%1\;li %0,0\;adde. %0,%0,%0
  19829. +   addic %0,%1,%n2\;li %0,0\;adde. %0,%0,%0"
  19830. +  [(set_attr "type" "compare")
  19831. +   (set_attr "length" "12")])
  19832. +
  19833. +(define_insn ""
  19834. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19835. +    (plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19836. +             (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19837. +         (match_operand:SI 3 "gpc_reg_operand" "r,r")))
  19838. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19839. +  "! TARGET_POWERPC64"
  19840. +  "@
  19841. +   {sf|subfc} %4,%2,%1\;{aze|addze} %0,%3
  19842. +   {ai|addic} %4,%1,%n2\;{aze|addze} %0,%3"
  19843. +  [(set_attr "length" "8")])
  19844. +
  19845. +(define_insn ""
  19846. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  19847. +    (compare:CC
  19848. +     (plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19849. +              (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19850. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19851. +     (const_int 0)))
  19852. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19853. +  "! TARGET_POWERPC64"
  19854. +  "@
  19855. +   {sf|subfc} %4,%2,%1\;{aze.|addze.} %4,%3
  19856. +   {ai|addic} %4,%1,%n2\;{aze.|addze.} %4,%3"
  19857. +  [(set_attr "type" "compare")
  19858. +   (set_attr "length" "8")])
  19859. +
  19860. +(define_insn ""
  19861. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
  19862. +    (compare:CC
  19863. +     (plus:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19864. +              (match_operand:SI 2 "reg_or_neg_short_operand" "r,P"))
  19865. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19866. +     (const_int 0)))
  19867. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19868. +    (plus:SI (geu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  19869. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19870. +  "! TARGET_POWERPC64"
  19871. +  "@
  19872. +   {sf|subfc} %4,%2,%1\;{aze.|addze.} %0,%3
  19873. +   {ai|addic} %4,%1,%n2\;{aze.|addze.} %0,%3"
  19874. +  [(set_attr "type" "compare")
  19875. +   (set_attr "length" "8")])
  19876. +
  19877. +(define_insn ""
  19878. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19879. +    (neg:SI (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19880. +            (match_operand:SI 2 "reg_or_short_operand" "r,I"))))]
  19881. +  "! TARGET_POWERPC64"
  19882. +  "@
  19883. +   {sf|subfc} %0,%2,%1\;{sfe|subfe} %0,%0,%0\;nand %0,%0,%0
  19884. +   {sfi|subfic} %0,%1,-1\;{a%I2|add%I2c} %0,%0,%2\;{sfe|subfe} %0,%0,%0"
  19885. +  [(set_attr "length" "12")])
  19886. +
  19887. +(define_insn ""
  19888. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19889. +    (and:SI (neg:SI
  19890. +         (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19891. +             (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
  19892. +        (match_operand:SI 3 "gpc_reg_operand" "r,r")))
  19893. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19894. +  "! TARGET_POWERPC64"
  19895. +  "@
  19896. +   {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4
  19897. +   {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc %0,%3,%4"
  19898. +  [(set_attr "length" "12")])
  19899. +
  19900. +(define_insn ""
  19901. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  19902. +    (compare:CC
  19903. +     (and:SI (neg:SI
  19904. +          (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19905. +              (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
  19906. +         (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19907. +     (const_int 0)))
  19908. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19909. +  "! TARGET_POWERPC64"
  19910. +  "@
  19911. +   {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc. %4,%3,%4
  19912. +   {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc. %4,%3,%4"
  19913. +  [(set_attr "type" "compare")
  19914. +   (set_attr "length" "12")])
  19915. +
  19916. +(define_insn ""
  19917. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
  19918. +    (compare:CC
  19919. +     (and:SI (neg:SI
  19920. +          (geu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  19921. +              (match_operand:SI 2 "reg_or_neg_short_operand" "r,P")))
  19922. +         (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  19923. +     (const_int 0)))
  19924. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  19925. +    (and:SI (neg:SI (geu:SI (match_dup 1) (match_dup 2))) (match_dup 3)))
  19926. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  19927. +  "! TARGET_POWERPC64"
  19928. +  "@
  19929. +   {sf|subfc} %4,%2,%1\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4
  19930. +   {ai|addic} %4,%1,%n2\;{sfe|subfe} %4,%4,%4\;andc. %0,%3,%4"
  19931. +  [(set_attr "type" "compare")
  19932. +   (set_attr "length" "12")])
  19933. +
  19934. +(define_insn ""
  19935. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19936. +    (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19937. +           (const_int 0)))]
  19938. +  "! TARGET_POWERPC64"
  19939. +  "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{sri|srwi} %0,%0,31"
  19940. +  [(set_attr "length" "12")])
  19941. +
  19942. +(define_insn ""
  19943. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19944. +    (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  19945. +           (const_int 0)))]
  19946. +  "TARGET_POWERPC64"
  19947. +  "subfic %0,%1,0\;addme %0,%0\;srdi %0,%0,63"
  19948. +  [(set_attr "length" "12")])
  19949. +
  19950. +(define_insn ""
  19951. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  19952. +    (compare:CC
  19953. +     (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19954. +        (const_int 0))
  19955. +     (const_int 0)))
  19956. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19957. +    (gt:SI (match_dup 1) (const_int 0)))]
  19958. +  "! TARGET_POWERPC64"
  19959. +  "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{sri.|srwi.} %0,%0,31"
  19960. +  [(set_attr "type" "delayed_compare")
  19961. +   (set_attr "length" "12")])
  19962. +
  19963. +(define_insn ""
  19964. +  [(set (match_operand:CC 2 "cc_reg_operand" "=x")
  19965. +    (compare:CC
  19966. +     (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  19967. +        (const_int 0))
  19968. +     (const_int 0)))
  19969. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  19970. +    (gt:DI (match_dup 1) (const_int 0)))]
  19971. +  "TARGET_POWERPC64"
  19972. +  "subfic %0,%1,0\;addme %0,%0\;srdi. %0,%0,63"
  19973. +  [(set_attr "type" "delayed_compare")
  19974. +   (set_attr "length" "12")])
  19975. +
  19976. +(define_insn ""
  19977. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19978. +    (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19979. +           (match_operand:SI 2 "reg_or_short_operand" "r")))]
  19980. +  "TARGET_POWER"
  19981. +  "doz %0,%2,%1\;nabs %0,%0\;{sri|srwi} %0,%0,31"
  19982. +  [(set_attr "length" "12")])
  19983. +
  19984. +(define_insn ""
  19985. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  19986. +    (compare:CC
  19987. +     (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  19988. +        (match_operand:SI 2 "reg_or_short_operand" "r"))
  19989. +     (const_int 0)))
  19990. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19991. +    (gt:SI (match_dup 1) (match_dup 2)))]
  19992. +  "TARGET_POWER"
  19993. +  "doz %0,%2,%1\;nabs %0,%0\;{sri.|srwi.} %0,%0,31"
  19994. +  [(set_attr "type" "delayed_compare")
  19995. +   (set_attr "length" "12")])
  19996. +
  19997. +(define_insn ""
  19998. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  19999. +    (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20000. +            (const_int 0))
  20001. +         (match_operand:SI 2 "gpc_reg_operand" "r")))
  20002. +   (clobber (match_scratch:SI 3 "=&r"))]
  20003. +  "! TARGET_POWERPC64"
  20004. +  "{a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze|addze} %0,%2"
  20005. +  [(set_attr "length" "12")])
  20006. +
  20007. +(define_insn ""
  20008. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  20009. +    (plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20010. +            (const_int 0))
  20011. +         (match_operand:DI 2 "gpc_reg_operand" "r")))
  20012. +   (clobber (match_scratch:DI 3 "=&r"))]
  20013. +  "TARGET_POWERPC64"
  20014. +  "addc %3,%1,%1\;subfe %3,%1,%3\;addze %0,%2"
  20015. +  [(set_attr "length" "12")])
  20016. +
  20017. +(define_insn ""
  20018. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  20019. +    (compare:CC
  20020. +     (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20021. +             (const_int 0))
  20022. +          (match_operand:SI 2 "gpc_reg_operand" "r"))
  20023. +     (const_int 0)))
  20024. +   (clobber (match_scratch:SI 3 "=&r"))]
  20025. +  "! TARGET_POWERPC64"
  20026. +  "{a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze.|addze.} %3,%2"
  20027. +  [(set_attr "type" "compare")
  20028. +   (set_attr "length" "12")])
  20029. +
  20030. +(define_insn ""
  20031. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  20032. +    (compare:CC
  20033. +     (plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20034. +             (const_int 0))
  20035. +          (match_operand:DI 2 "gpc_reg_operand" "r"))
  20036. +     (const_int 0)))
  20037. +   (clobber (match_scratch:DI 3 "=&r"))]
  20038. +  "TARGET_POWERPC64"
  20039. +  "addc %3,%1,%1\;subfe %3,%1,%3\;addze. %3,%2"
  20040. +  [(set_attr "type" "compare")
  20041. +   (set_attr "length" "12")])
  20042. +
  20043. +(define_insn ""
  20044. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  20045. +    (compare:CC
  20046. +     (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20047. +             (const_int 0))
  20048. +          (match_operand:SI 2 "gpc_reg_operand" "r"))
  20049. +     (const_int 0)))
  20050. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20051. +    (plus:SI (gt:SI (match_dup 1) (const_int 0)) (match_dup 2)))
  20052. +   (clobber (match_scratch:SI 3 "=&r"))]
  20053. +  "! TARGET_POWERPC64"
  20054. +  "{a|addc} %3,%1,%1\;{sfe|subfe} %3,%1,%3\;{aze.|addze.} %0,%2"
  20055. +  [(set_attr "type" "compare")
  20056. +   (set_attr "length" "12")])
  20057. +
  20058. +(define_insn ""
  20059. +  [(set (match_operand:CC 4 "cc_reg_operand" "=x")
  20060. +    (compare:CC
  20061. +     (plus:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20062. +             (const_int 0))
  20063. +          (match_operand:DI 2 "gpc_reg_operand" "r"))
  20064. +     (const_int 0)))
  20065. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  20066. +    (plus:DI (gt:DI (match_dup 1) (const_int 0)) (match_dup 2)))
  20067. +   (clobber (match_scratch:DI 3 "=&r"))]
  20068. +  "TARGET_POWERPC64"
  20069. +  "addc %3,%1,%1\;subfe %3,%1,%3\;addze. %0,%2"
  20070. +  [(set_attr "type" "compare")
  20071. +   (set_attr "length" "12")])
  20072. +
  20073. +(define_insn ""
  20074. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20075. +    (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20076. +            (match_operand:SI 2 "reg_or_short_operand" "r"))
  20077. +         (match_operand:SI 3 "gpc_reg_operand" "r")))
  20078. +   (clobber (match_scratch:SI 4 "=&r"))]
  20079. +  "TARGET_POWER"
  20080. +  "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze|addze} %0,%3"
  20081. +  [(set_attr "length" "12")])
  20082. +
  20083. +(define_insn ""
  20084. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x")
  20085. +    (compare:CC
  20086. +     (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20087. +             (match_operand:SI 2 "reg_or_short_operand" "r"))
  20088. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  20089. +     (const_int 0)))
  20090. +   (clobber (match_scratch:SI 4 "=&r"))]
  20091. +  "TARGET_POWER"
  20092. +  "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze.|addze.} %4,%3"
  20093. +  [(set_attr "type" "compare")
  20094. +   (set_attr "length" "12")])
  20095. +
  20096. +(define_insn ""
  20097. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x")
  20098. +    (compare:CC
  20099. +     (plus:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20100. +             (match_operand:SI 2 "reg_or_short_operand" "r"))
  20101. +          (match_operand:SI 3 "gpc_reg_operand" "r"))
  20102. +     (const_int 0)))
  20103. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20104. +    (plus:SI (gt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  20105. +   (clobber (match_scratch:SI 4 "=&r"))]
  20106. +  "TARGET_POWER"
  20107. +  "doz %4,%2,%1\;{ai|addic} %4,%4,-1\;{aze.|addze.} %0,%3"
  20108. +  [(set_attr "type" "compare")
  20109. +   (set_attr "length" "12")])
  20110. +
  20111. +(define_insn ""
  20112. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20113. +    (neg:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20114. +               (const_int 0))))]
  20115. +  "! TARGET_POWERPC64"
  20116. +  "{sfi|subfic} %0,%1,0\;{ame|addme} %0,%0\;{srai|srawi} %0,%0,31"
  20117. +  [(set_attr "length" "12")])
  20118. +
  20119. +(define_insn ""
  20120. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  20121. +    (neg:DI (gt:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20122. +               (const_int 0))))]
  20123. +  "TARGET_POWERPC64"
  20124. +  "subfic %0,%1,0\;addme %0,%0\;sradi} %0,%0,63"
  20125. +  [(set_attr "length" "12")])
  20126. +
  20127. +(define_insn ""
  20128. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20129. +    (neg:SI (gt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20130. +               (match_operand:SI 2 "reg_or_short_operand" "r"))))]
  20131. +  "TARGET_POWER"
  20132. +  "doz %0,%2,%1\;nabs %0,%0\;{srai|srawi} %0,%0,31"
  20133. +  [(set_attr "length" "12")])
  20134. +
  20135. +(define_insn ""
  20136. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20137. +    (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20138. +        (match_operand:SI 2 "reg_or_short_operand" "rI")))]
  20139. +  "! TARGET_POWERPC64"
  20140. +  "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;neg %0,%0"
  20141. +  [(set_attr "length" "12")])
  20142. +
  20143. +(define_insn ""
  20144. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  20145. +    (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20146. +        (match_operand:DI 2 "reg_or_short_operand" "rI")))]
  20147. +  "TARGET_POWERPC64"
  20148. +  "subf%I2c %0,%1,%2\;subfe %0,%0,%0\;neg %0,%0"
  20149. +  [(set_attr "length" "12")])
  20150. +
  20151. +(define_insn ""
  20152. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  20153. +    (compare:CC
  20154. +     (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20155. +         (match_operand:SI 2 "reg_or_short_operand" "rI"))
  20156. +     (const_int 0)))
  20157. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20158. +    (gtu:SI (match_dup 1) (match_dup 2)))]
  20159. +  "! TARGET_POWERPC64"
  20160. +  "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0\;neg. %0,%0"
  20161. +  [(set_attr "type" "compare")
  20162. +   (set_attr "length" "12")])
  20163. +
  20164. +(define_insn ""
  20165. +  [(set (match_operand:CC 3 "cc_reg_operand" "=x")
  20166. +    (compare:CC
  20167. +     (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20168. +         (match_operand:DI 2 "reg_or_short_operand" "rI"))
  20169. +     (const_int 0)))
  20170. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r")
  20171. +    (gtu:DI (match_dup 1) (match_dup 2)))]
  20172. +  "TARGET_POWERPC64"
  20173. +  "subf%I2c %0,%1,%2\;subfe %0,%0,%0\;neg. %0,%0"
  20174. +  [(set_attr "type" "compare")
  20175. +   (set_attr "length" "12")])
  20176. +
  20177. +(define_insn ""
  20178. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  20179. +    (plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  20180. +             (match_operand:SI 2 "reg_or_short_operand" "I,rI"))
  20181. +         (match_operand:SI 3 "reg_or_short_operand" "r,rI")))
  20182. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  20183. +  "! TARGET_POWERPC64"
  20184. +  "@
  20185. +   {ai|addic} %4,%1,%k2\;{aze|addze} %0,%3
  20186. +   {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf%I3|subf%I3c} %0,%4,%3"
  20187. +  [(set_attr "length" "8,12")])
  20188. +
  20189. +(define_insn ""
  20190. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  20191. +    (plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
  20192. +             (match_operand:DI 2 "reg_or_short_operand" "I,rI"))
  20193. +         (match_operand:DI 3 "reg_or_short_operand" "r,rI")))
  20194. +   (clobber (match_scratch:DI 4 "=&r,&r"))]
  20195. +  "TARGET_POWERPC64"
  20196. +  "@
  20197. +   addic %4,%1,%k2\;addze %0,%3
  20198. +   subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subf%I3c %0,%4,%3"
  20199. +  [(set_attr "length" "8,12")])
  20200. +
  20201. +(define_insn ""
  20202. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  20203. +    (compare:CC
  20204. +     (plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  20205. +              (match_operand:SI 2 "reg_or_short_operand" "I,r"))
  20206. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  20207. +     (const_int 0)))
  20208. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  20209. +  "! TARGET_POWERPC64"
  20210. +  "@
  20211. +   {ai|addic} %4,%1,%k2\;{aze.|addze.} %4,%3
  20212. +   {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %4,%4,%3"
  20213. +  [(set_attr "type" "compare")
  20214. +   (set_attr "length" "8,12")])
  20215. +
  20216. +(define_insn ""
  20217. +  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")
  20218. +    (compare:CC
  20219. +     (plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
  20220. +              (match_operand:DI 2 "reg_or_short_operand" "I,r"))
  20221. +          (match_operand:DI 3 "gpc_reg_operand" "r,r"))
  20222. +     (const_int 0)))
  20223. +   (clobber (match_scratch:DI 4 "=&r,&r"))]
  20224. +  "TARGET_POWERPC64"
  20225. +  "@
  20226. +   addic %4,%1,%k2\;addze. %4,%3
  20227. +   subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subfc. %4,%4,%3"
  20228. +  [(set_attr "type" "compare")
  20229. +   (set_attr "length" "8,12")])
  20230. +
  20231. +(define_insn ""
  20232. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
  20233. +    (compare:CC
  20234. +     (plus:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")
  20235. +              (match_operand:SI 2 "reg_or_short_operand" "I,r"))
  20236. +          (match_operand:SI 3 "gpc_reg_operand" "r,r"))
  20237. +     (const_int 0)))
  20238. +   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
  20239. +    (plus:SI (gtu:SI (match_dup 1) (match_dup 2)) (match_dup 3)))
  20240. +   (clobber (match_scratch:SI 4 "=&r,&r"))]
  20241. +  "! TARGET_POWERPC64"
  20242. +  "@
  20243. +   {ai|addic} %4,%1,%k2\;{aze.|addze.} %0,%3
  20244. +   {sf%I2|subf%I2c} %4,%1,%2\;{sfe|subfe} %4,%4,%4\;{sf.|subfc.} %0,%4,%3"
  20245. +  [(set_attr "type" "compare")
  20246. +   (set_attr "length" "8,12")])
  20247. +
  20248. +(define_insn ""
  20249. +  [(set (match_operand:CC 5 "cc_reg_operand" "=x,x")
  20250. +    (compare:CC
  20251. +     (plus:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r,r")
  20252. +              (match_operand:DI 2 "reg_or_short_operand" "I,r"))
  20253. +          (match_operand:DI 3 "gpc_reg_operand" "r,r"))
  20254. +     (const_int 0)))
  20255. +   (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
  20256. +    (plus:DI (gtu:DI (match_dup 1) (match_dup 2)) (match_dup 3)))
  20257. +   (clobber (match_scratch:DI 4 "=&r,&r"))]
  20258. +  "TARGET_POWERPC64"
  20259. +  "@
  20260. +   addic %4,%1,%k2\;addze. %0,%3
  20261. +   subf%I2c %4,%1,%2\;subfe %4,%4,%4\;subfc. %0,%4,%3"
  20262. +  [(set_attr "type" "compare")
  20263. +   (set_attr "length" "8,12")])
  20264. +
  20265. +(define_insn ""
  20266. +  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
  20267. +    (neg:SI (gtu:SI (match_operand:SI 1 "gpc_reg_operand" "r")
  20268. +            (match_operand:SI 2 "reg_or_short_operand" "rI"))))]
  20269. +  "! TARGET_POWERPC64"
  20270. +  "{sf%I2|subf%I2c} %0,%1,%2\;{sfe|subfe} %0,%0,%0"
  20271. +  [(set_attr "length" "8")])
  20272. +
  20273. +(define_insn ""
  20274. +  [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
  20275. +    (neg:DI (gtu:DI (match_operand:DI 1 "gpc_reg_operand" "r")
  20276. +            (match_operand:DI 2 "reg_or_short_operand" "rI"))))]
  20277. +  "TARGET_POWERPC64"
  20278. +  "subf%I2c %0,%1,%2\;subfe %0,%0,%0"
  20279. +  [(set_attr "length" "8")])
  20280. +
  20281. +;; Define both directions of branch and return.  If we need a reload
  20282. +;; register, we'd rather use CR0 since it is much easier to copy a
  20283. +;; register CC value to there.
  20284. +
  20285. +(define_insn ""
  20286. +  [(set (pc)
  20287. +    (if_then_else (match_operator 1 "branch_comparison_operator"
  20288. +                      [(match_operand 2
  20289. +                              "cc_reg_operand" "x,?y")
  20290. +                       (const_int 0)])
  20291. +              (label_ref (match_operand 0 "" ""))
  20292. +              (pc)))]
  20293. +  ""
  20294. +  "*
  20295. +{
  20296. +  if (get_attr_length (insn) == 8)
  20297. +    return \"%C1bc %t1,%j1,%l0\";
  20298. +  else
  20299. +    return \"%C1bc %T1,%j1,%$+8\;b %l0\";
  20300. +
  20301. +}"
  20302. +  [(set_attr "type" "branch")])
  20303. +
  20304. +(define_insn ""
  20305. +  [(set (pc)
  20306. +    (if_then_else (match_operator 0 "branch_comparison_operator"
  20307. +                      [(match_operand 1
  20308. +                              "cc_reg_operand" "x,?y")
  20309. +                       (const_int 0)])
  20310. +              (return)
  20311. +              (pc)))]
  20312. +  "direct_return ()"
  20313. +  "{%C0bcr|%C0bclr} %t0,%j0"
  20314. +  [(set_attr "type" "branch")
  20315. +   (set_attr "length" "8")])
  20316. +
  20317. +(define_insn ""
  20318. +  [(set (pc)
  20319. +    (if_then_else (match_operator 1 "branch_comparison_operator"
  20320. +                      [(match_operand 2
  20321. +                              "cc_reg_operand" "x,?y")
  20322. +                       (const_int 0)])
  20323. +              (pc)
  20324. +              (label_ref (match_operand 0 "" ""))))]
  20325. +  ""
  20326. +  "*
  20327. +{
  20328. +  if (get_attr_length (insn) == 8)
  20329. +    return \"%C1bc %T1,%j1,%l0\";
  20330. +  else
  20331. +    return \"%C1bc %t1,%j1,%$+8\;b %l0\";
  20332. +}"
  20333. +  [(set_attr "type" "branch")])
  20334. +
  20335. +(define_insn ""
  20336. +  [(set (pc)
  20337. +    (if_then_else (match_operator 0 "branch_comparison_operator"
  20338. +                      [(match_operand 1
  20339. +                              "cc_reg_operand" "x,?y")
  20340. +                       (const_int 0)])
  20341. +              (pc)
  20342. +              (return)))]
  20343. +  "direct_return ()"
  20344. +  "{%C0bcr|%C0bclr} %T0,%j0"
  20345. +  [(set_attr "type" "branch")
  20346. +   (set_attr "length" "8")])
  20347. +
  20348. +;; Unconditional branch and return.
  20349. +
  20350. +(define_insn "jump"
  20351. +  [(set (pc)
  20352. +    (label_ref (match_operand 0 "" "")))]
  20353. +  ""
  20354. +  "b %l0"
  20355. +  [(set_attr "type" "branch")])
  20356. +
  20357. +(define_insn "return"
  20358. +  [(return)]
  20359. +  "direct_return ()"
  20360. +  "{br|blr}"
  20361. +  [(set_attr "type" "jmpreg")])
  20362. +
  20363. +(define_expand "indirect_jump"
  20364. +  [(set (pc) (match_operand 0 "register_operand" ""))]
  20365. +  ""
  20366. +  "
  20367. +{
  20368. +  if (TARGET_32BIT)
  20369. +    emit_jump_insn (gen_indirect_jumpsi (operands[0]));
  20370. +  else
  20371. +    emit_jump_insn (gen_indirect_jumpdi (operands[0]));
  20372. +  DONE;
  20373. +}")
  20374. +
  20375. +(define_insn "indirect_jumpsi"
  20376. +  [(set (pc) (match_operand:SI 0 "register_operand" "c,l"))]
  20377. +  "TARGET_32BIT"
  20378. +  "@
  20379. +   bctr
  20380. +   {br|blr}"
  20381. +  [(set_attr "type" "jmpreg")])
  20382. +
  20383. +(define_insn "indirect_jumpdi"
  20384. +  [(set (pc) (match_operand:DI 0 "register_operand" "c,l"))]
  20385. +  "TARGET_64BIT"
  20386. +  "@
  20387. +   bctr
  20388. +   {br|blr}"
  20389. +  [(set_attr "type" "jmpreg")])
  20390. +
  20391. +;; Table jump for switch statements:
  20392. +(define_expand "tablejump"
  20393. +  [(use (match_operand 0 "" ""))
  20394. +   (use (label_ref (match_operand 1 "" "")))]
  20395. +  ""
  20396. +  "
  20397. +{
  20398. +  if (TARGET_32BIT)
  20399. +    emit_jump_insn (gen_tablejumpsi (operands[0], operands[1]));
  20400. +  else
  20401. +    emit_jump_insn (gen_tablejumpdi (operands[0], operands[1]));
  20402. +  DONE;
  20403. +}")
  20404. +
  20405. +(define_expand "tablejumpsi"
  20406. +  [(set (match_dup 3)
  20407. +    (plus:SI (match_operand:SI 0 "" "")
  20408. +         (match_dup 2)))
  20409. +   (parallel [(set (pc) (match_dup 3))
  20410. +          (use (label_ref (match_operand 1 "" "")))])]
  20411. +  "TARGET_32BIT"
  20412. +  "
  20413. +{ operands[0] = force_reg (SImode, operands[0]);
  20414. +  operands[2] = force_reg (SImode, gen_rtx_LABEL_REF (VOIDmode, operands[1]));
  20415. +  operands[3] = gen_reg_rtx (SImode);
  20416. +}")
  20417. +
  20418. +(define_expand "tablejumpdi"
  20419. +  [(set (match_dup 3)
  20420. +    (plus:DI (match_operand:DI 0 "" "")
  20421. +         (match_dup 2)))
  20422. +   (parallel [(set (pc) (match_dup 3))
  20423. +          (use (label_ref (match_operand 1 "" "")))])]
  20424. +  "TARGET_64BIT"
  20425. +  "
  20426. +{ operands[0] = force_reg (DImode, operands[0]);
  20427. +  operands[2] = force_reg (DImode, gen_rtx_LABEL_REF (VOIDmode, operands[1]));
  20428. +  operands[3] = gen_reg_rtx (DImode);
  20429. +}")
  20430. +
  20431. +(define_insn ""
  20432. +  [(set (pc)
  20433. +    (match_operand:SI 0 "register_operand" "c,l"))
  20434. +   (use (label_ref (match_operand 1 "" "")))]
  20435. +  "TARGET_32BIT"
  20436. +  "@
  20437. +   bctr
  20438. +   {br|blr}"
  20439. +  [(set_attr "type" "jmpreg")])
  20440. +
  20441. +(define_insn ""
  20442. +  [(set (pc)
  20443. +    (match_operand:DI 0 "register_operand" "c,l"))
  20444. +   (use (label_ref (match_operand 1 "" "")))]
  20445. +  "TARGET_64BIT"
  20446. +  "@
  20447. +   bctr
  20448. +   {br|blr}"
  20449. +  [(set_attr "type" "jmpreg")])
  20450. +
  20451. +(define_insn "nop"
  20452. +  [(const_int 0)]
  20453. +  ""
  20454. +  "{cror 0,0,0|nop}")
  20455. +
  20456. +;; Define the subtract-one-and-jump insns, starting with the template
  20457. +;; so loop.c knows what to generate.
  20458. +
  20459. +(define_expand "decrement_and_branch_on_count"
  20460. +  [(use (match_operand 0 "register_operand" ""))
  20461. +   (use (label_ref (match_operand 1 "" "")))]
  20462. +  ""
  20463. +  "
  20464. +{
  20465. +  if (TARGET_POWERPC64)
  20466. +    emit_jump_insn (gen_ctrdi (operands[0], operands[1]));
  20467. +  else
  20468. +    emit_jump_insn (gen_ctrsi (operands[0], operands[1]));
  20469. +  DONE;
  20470. +}")
  20471. +
  20472. +(define_expand "ctrsi"
  20473. +  [(parallel [(set (pc) (if_then_else (ne (match_operand:SI 0 "register_operand" "")
  20474. +                      (const_int 1))
  20475. +                      (label_ref (match_operand 1 "" ""))
  20476. +                      (pc)))
  20477. +          (set (match_dup 0)
  20478. +           (plus:SI (match_dup 0)
  20479. +                (const_int -1)))
  20480. +          (clobber (match_scratch:CC 2 ""))
  20481. +          (clobber (match_scratch:SI 3 ""))])]
  20482. +  "! TARGET_POWERPC64"
  20483. +  "")
  20484. +
  20485. +(define_expand "ctrdi"
  20486. +  [(parallel [(set (pc) (if_then_else (ne (match_operand:DI 0 "register_operand" "")
  20487. +                      (const_int 1))
  20488. +                      (label_ref (match_operand 1 "" ""))
  20489. +                      (pc)))
  20490. +          (set (match_dup 0)
  20491. +           (plus:DI (match_dup 0)
  20492. +                (const_int -1)))
  20493. +          (clobber (match_scratch:CC 2 ""))
  20494. +          (clobber (match_scratch:DI 3 ""))])]
  20495. +  "TARGET_POWERPC64"
  20496. +  "")
  20497. +
  20498. +;; We need to be able to do this for any operand, including MEM, or we
  20499. +;; will cause reload to blow up since we don't allow output reloads on
  20500. +;; JUMP_INSNs.
  20501. +;; For the length attribute to be calculated correctly, the
  20502. +;; label MUST be operand 0.
  20503. +
  20504. +(define_insn "*ctrsi_internal1"
  20505. +  [(set (pc)
  20506. +    (if_then_else (ne (match_operand:SI 1 "register_operand" "c,*r,*r")
  20507. +              (const_int 1))
  20508. +              (label_ref (match_operand 0 "" ""))
  20509. +              (pc)))
  20510. +   (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
  20511. +    (plus:SI (match_dup 1)
  20512. +         (const_int -1)))
  20513. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20514. +   (clobber (match_scratch:SI 4 "=X,X,r"))]
  20515. +  "! TARGET_POWERPC64"
  20516. +  "*
  20517. +{
  20518. +  if (which_alternative != 0)
  20519. +    return \"#\";
  20520. +  else if (get_attr_length (insn) == 8)
  20521. +    return \"{bdn|bdnz} %l0\";
  20522. +  else
  20523. +    return \"bdz %$+8\;b %l0\";
  20524. +}"
  20525. +  [(set_attr "type" "branch")
  20526. +   (set_attr "length" "*,12,16")])
  20527. +
  20528. +(define_insn "*ctrsi_internal2"
  20529. +  [(set (pc)
  20530. +    (if_then_else (ne (match_operand:SI 1 "register_operand" "c,*r,*r")
  20531. +              (const_int 1))
  20532. +              (pc)
  20533. +              (label_ref (match_operand 0 "" ""))))
  20534. +   (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
  20535. +    (plus:SI (match_dup 1)
  20536. +         (const_int -1)))
  20537. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20538. +   (clobber (match_scratch:SI 4 "=X,X,r"))]
  20539. +  "! TARGET_POWERPC64"
  20540. +  "*
  20541. +{
  20542. +  if (which_alternative != 0)
  20543. +    return \"#\";
  20544. +  else if (get_attr_length (insn) == 8)
  20545. +    return \"bdz %l0\";
  20546. +  else
  20547. +    return \"{bdn|bdnz} %$+8\;b %l0\";
  20548. +}"
  20549. +  [(set_attr "type" "branch")
  20550. +   (set_attr "length" "*,12,16")])
  20551. +
  20552. +(define_insn "*ctrdi_internal1"
  20553. +  [(set (pc)
  20554. +    (if_then_else (ne (match_operand:DI 1 "register_operand" "c,*r,*r")
  20555. +              (const_int 1))
  20556. +              (label_ref (match_operand 0 "" ""))
  20557. +              (pc)))
  20558. +   (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
  20559. +    (plus:DI (match_dup 1)
  20560. +         (const_int -1)))
  20561. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20562. +   (clobber (match_scratch:DI 4 "=X,X,r"))]
  20563. +  "TARGET_POWERPC64"
  20564. +  "*
  20565. +{
  20566. +  if (which_alternative != 0)
  20567. +    return \"#\";
  20568. +  else if (get_attr_length (insn) == 8)
  20569. +    return \"{bdn|bdnz} %l0\";
  20570. +  else
  20571. +    return \"bdz %$+8\;b %l0\";
  20572. +}"
  20573. +  [(set_attr "type" "branch")
  20574. +   (set_attr "length" "*,12,16")])
  20575. +
  20576. +(define_insn "*ctrdi_internal2"
  20577. +  [(set (pc)
  20578. +    (if_then_else (ne (match_operand:DI 1 "register_operand" "c,*r,*r")
  20579. +              (const_int 1))
  20580. +              (pc)
  20581. +              (label_ref (match_operand 0 "" ""))))
  20582. +   (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
  20583. +    (plus:DI (match_dup 1)
  20584. +         (const_int -1)))
  20585. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20586. +   (clobber (match_scratch:DI 4 "=X,X,r"))]
  20587. +  "TARGET_POWERPC64"
  20588. +  "*
  20589. +{
  20590. +  if (which_alternative != 0)
  20591. +    return \"#\";
  20592. +  else if (get_attr_length (insn) == 8)
  20593. +    return \"bdz %l0\";
  20594. +  else
  20595. +    return \"{bdn|bdnz} %$+8\;b %l0\";
  20596. +}"
  20597. +  [(set_attr "type" "branch")
  20598. +   (set_attr "length" "*,12,16")])
  20599. +
  20600. +;; Similar, but we can use GE since we have a REG_NONNEG.
  20601. +
  20602. +(define_insn "*ctrsi_internal3"
  20603. +  [(set (pc)
  20604. +    (if_then_else (ge (match_operand:SI 1 "register_operand" "c,*r,*r")
  20605. +              (const_int 0))
  20606. +              (label_ref (match_operand 0 "" ""))
  20607. +              (pc)))
  20608. +   (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
  20609. +    (plus:SI (match_dup 1)
  20610. +         (const_int -1)))
  20611. +   (clobber (match_scratch:CC 3 "=X,&x,&X"))
  20612. +   (clobber (match_scratch:SI 4 "=X,X,r"))]
  20613. +  "! TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
  20614. +  "*
  20615. +{
  20616. +  if (which_alternative != 0)
  20617. +    return \"#\";
  20618. +  else if (get_attr_length (insn) == 8)
  20619. +    return \"{bdn|bdnz} %l0\";
  20620. +  else
  20621. +    return \"bdz %$+8\;b %l0\";
  20622. +}"
  20623. +  [(set_attr "type" "branch")
  20624. +   (set_attr "length" "*,12,16")])
  20625. +
  20626. +(define_insn "*ctrsi_internal4"
  20627. +  [(set (pc)
  20628. +    (if_then_else (ge (match_operand:SI 1 "register_operand" "c,*r,*r")
  20629. +              (const_int 0))
  20630. +              (pc)
  20631. +              (label_ref (match_operand 0 "" ""))))
  20632. +   (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
  20633. +    (plus:SI (match_dup 1)
  20634. +         (const_int -1)))
  20635. +   (clobber (match_scratch:CC 3 "=X,&x,&X"))
  20636. +   (clobber (match_scratch:SI 4 "=X,X,r"))]
  20637. +  "! TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
  20638. +  "*
  20639. +{
  20640. +  if (which_alternative != 0)
  20641. +    return \"#\";
  20642. +  else if (get_attr_length (insn) == 8)
  20643. +    return \"bdz %l0\";
  20644. +  else
  20645. +    return \"{bdn|bdnz} %$+8\;b %l0\";
  20646. +}"
  20647. +  [(set_attr "type" "branch")
  20648. +   (set_attr "length" "*,12,16")])
  20649. +
  20650. +(define_insn "*ctrdi_internal3"
  20651. +  [(set (pc)
  20652. +    (if_then_else (ge (match_operand:DI 1 "register_operand" "c,*r,*r")
  20653. +              (const_int 0))
  20654. +              (label_ref (match_operand 0 "" ""))
  20655. +              (pc)))
  20656. +   (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
  20657. +    (plus:DI (match_dup 1)
  20658. +         (const_int -1)))
  20659. +   (clobber (match_scratch:CC 3 "=X,&x,&X"))
  20660. +   (clobber (match_scratch:DI 4 "=X,X,r"))]
  20661. +  "TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
  20662. +  "*
  20663. +{
  20664. +  if (which_alternative != 0)
  20665. +    return \"#\";
  20666. +  else if (get_attr_length (insn) == 8)
  20667. +    return \"{bdn|bdnz} %l0\";
  20668. +  else
  20669. +    return \"bdz %$+8\;b %l0\";
  20670. +}"
  20671. +  [(set_attr "type" "branch")
  20672. +   (set_attr "length" "*,12,16")])
  20673. +
  20674. +(define_insn "*ctrdi_internal4"
  20675. +  [(set (pc)
  20676. +    (if_then_else (ge (match_operand:DI 1 "register_operand" "c,*r,*r")
  20677. +              (const_int 0))
  20678. +              (pc)
  20679. +              (label_ref (match_operand 0 "" ""))))
  20680. +   (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
  20681. +    (plus:DI (match_dup 1)
  20682. +         (const_int -1)))
  20683. +   (clobber (match_scratch:CC 3 "=X,&x,&X"))
  20684. +   (clobber (match_scratch:DI 4 "=X,X,r"))]
  20685. +  "TARGET_POWERPC64 && find_reg_note (insn, REG_NONNEG, 0)"
  20686. +  "*
  20687. +{
  20688. +  if (which_alternative != 0)
  20689. +    return \"#\";
  20690. +  else if (get_attr_length (insn) == 8)
  20691. +    return \"bdz %l0\";
  20692. +  else
  20693. +    return \"{bdn|bdnz} %$+8\;b %l0\";
  20694. +}"
  20695. +  [(set_attr "type" "branch")
  20696. +   (set_attr "length" "*,12,16")])
  20697. +
  20698. +;; Similar but use EQ
  20699. +
  20700. +(define_insn "*ctrsi_internal5"
  20701. +  [(set (pc)
  20702. +    (if_then_else (eq (match_operand:SI 1 "register_operand" "c,*r,*r")
  20703. +              (const_int 1))
  20704. +              (label_ref (match_operand 0 "" ""))
  20705. +              (pc)))
  20706. +   (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
  20707. +    (plus:SI (match_dup 1)
  20708. +         (const_int -1)))
  20709. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20710. +   (clobber (match_scratch:SI 4 "=X,X,r"))]
  20711. +  "! TARGET_POWERPC64"
  20712. +  "*
  20713. +{
  20714. +  if (which_alternative != 0)
  20715. +    return \"#\";
  20716. +  else if (get_attr_length (insn) == 8)
  20717. +    return \"bdz %l0\";
  20718. +  else
  20719. +    return \"{bdn|bdnz} %$+8\;b %l0\";
  20720. +}"
  20721. +  [(set_attr "type" "branch")
  20722. +   (set_attr "length" "*,12,16")])
  20723. +
  20724. +(define_insn "*ctrsi_internal6"
  20725. +  [(set (pc)
  20726. +    (if_then_else (eq (match_operand:SI 1 "register_operand" "c,*r,*r")
  20727. +              (const_int 1))
  20728. +              (pc)
  20729. +              (label_ref (match_operand 0 "" ""))))
  20730. +   (set (match_operand:SI 2 "register_operand" "=1,*r,m*q*c*l")
  20731. +    (plus:SI (match_dup 1)
  20732. +         (const_int -1)))
  20733. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20734. +   (clobber (match_scratch:SI 4 "=X,X,r"))]
  20735. +  "! TARGET_POWERPC64"
  20736. +  "*
  20737. +{
  20738. +  if (which_alternative != 0)
  20739. +    return \"#\";
  20740. +  else if (get_attr_length (insn) == 8)
  20741. +    return \"{bdn|bdnz} %l0\";
  20742. +  else
  20743. +    return \"bdz %$+8\;b %l0\";
  20744. +}"
  20745. +  [(set_attr "type" "branch")
  20746. +   (set_attr "length" "*,12,16")])
  20747. +
  20748. +(define_insn "*ctrdi_internal5"
  20749. +  [(set (pc)
  20750. +    (if_then_else (eq (match_operand:DI 1 "register_operand" "c,*r,*r")
  20751. +              (const_int 1))
  20752. +              (label_ref (match_operand 0 "" ""))
  20753. +              (pc)))
  20754. +   (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
  20755. +    (plus:DI (match_dup 1)
  20756. +         (const_int -1)))
  20757. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20758. +   (clobber (match_scratch:DI 4 "=X,X,r"))]
  20759. +  "TARGET_POWERPC64"
  20760. +  "*
  20761. +{
  20762. +  if (which_alternative != 0)
  20763. +    return \"#\";
  20764. +  else if (get_attr_length (insn) == 8)
  20765. +    return \"bdz %l0\";
  20766. +  else
  20767. +    return \"{bdn|bdnz} %$+8\;b %l0\";
  20768. +}"
  20769. +  [(set_attr "type" "branch")
  20770. +   (set_attr "length" "*,12,16")])
  20771. +
  20772. +(define_insn "*ctrdi_internal6"
  20773. +  [(set (pc)
  20774. +    (if_then_else (eq (match_operand:DI 1 "register_operand" "c,*r,*r")
  20775. +              (const_int 1))
  20776. +              (pc)
  20777. +              (label_ref (match_operand 0 "" ""))))
  20778. +   (set (match_operand:DI 2 "register_operand" "=1,*r,m*q*c*l")
  20779. +    (plus:DI (match_dup 1)
  20780. +         (const_int -1)))
  20781. +   (clobber (match_scratch:CC 3 "=X,&x,&x"))
  20782. +   (clobber (match_scratch:DI 4 "=X,X,r"))]
  20783. +  "TARGET_POWERPC64"
  20784. +  "*
  20785. +{
  20786. +  if (which_alternative != 0)
  20787. +    return \"#\";
  20788. +  else if (get_attr_length (insn) == 8)
  20789. +    return \"{bdn|bdnz} %l0\";
  20790. +  else
  20791. +    return \"bdz %$+8\;b %l0\";
  20792. +}"
  20793. +  [(set_attr "type" "branch")
  20794. +   (set_attr "length" "*,12,16")])
  20795. +
  20796. +;; Now the splitters if we could not allocate the CTR register
  20797. +
  20798. +(define_split
  20799. +  [(set (pc)
  20800. +    (if_then_else (match_operator 2 "comparison_operator"
  20801. +                      [(match_operand:SI 1 "gpc_reg_operand" "")
  20802. +                       (const_int 1)])
  20803. +              (match_operand 5 "" "")
  20804. +              (match_operand 6 "" "")))
  20805. +   (set (match_operand:SI 0 "gpc_reg_operand" "")
  20806. +    (plus:SI (match_dup 1)
  20807. +         (const_int -1)))
  20808. +   (clobber (match_scratch:CC 3 ""))
  20809. +   (clobber (match_scratch:SI 4 ""))]
  20810. +  "! TARGET_POWERPC64 && reload_completed"
  20811. +  [(parallel [(set (match_dup 3)
  20812. +           (compare:CC (plus:SI (match_dup 1)
  20813. +                    (const_int -1))
  20814. +                   (const_int 0)))
  20815. +          (set (match_dup 0)
  20816. +           (plus:SI (match_dup 1)
  20817. +                (const_int -1)))])
  20818. +   (set (pc) (if_then_else (match_dup 7)
  20819. +               (match_dup 5)
  20820. +               (match_dup 6)))]
  20821. +  "
  20822. +{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
  20823. +             const0_rtx); }")
  20824. +
  20825. +(define_split
  20826. +  [(set (pc)
  20827. +    (if_then_else (match_operator 2 "comparison_operator"
  20828. +                      [(match_operand:SI 1 "gpc_reg_operand" "")
  20829. +                       (const_int 1)])
  20830. +              (match_operand 5 "" "")
  20831. +              (match_operand 6 "" "")))
  20832. +   (set (match_operand:SI 0 "general_operand" "")
  20833. +    (plus:SI (match_dup 1) (const_int -1)))
  20834. +   (clobber (match_scratch:CC 3 ""))
  20835. +   (clobber (match_scratch:SI 4 ""))]
  20836. +  "! TARGET_POWERPC64 && reload_completed
  20837. +   && ! gpc_reg_operand (operands[0], SImode)"
  20838. +  [(parallel [(set (match_dup 3)
  20839. +           (compare:CC (plus:SI (match_dup 1)
  20840. +                    (const_int -1))
  20841. +                   (const_int 0)))
  20842. +          (set (match_dup 4)
  20843. +           (plus:SI (match_dup 1)
  20844. +                (const_int -1)))])
  20845. +   (set (match_dup 0)
  20846. +    (match_dup 4))
  20847. +   (set (pc) (if_then_else (match_dup 7)
  20848. +               (match_dup 5)
  20849. +               (match_dup 6)))]
  20850. +  "
  20851. +{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
  20852. +             const0_rtx); }")
  20853. +(define_split
  20854. +  [(set (pc)
  20855. +    (if_then_else (match_operator 2 "comparison_operator"
  20856. +                      [(match_operand:DI 1 "gpc_reg_operand" "")
  20857. +                       (const_int 1)])
  20858. +              (match_operand 5 "" "")
  20859. +              (match_operand 6 "" "")))
  20860. +   (set (match_operand:DI 0 "gpc_reg_operand" "")
  20861. +    (plus:DI (match_dup 1)
  20862. +         (const_int -1)))
  20863. +   (clobber (match_scratch:CC 3 ""))
  20864. +   (clobber (match_scratch:DI 4 ""))]
  20865. +  "TARGET_POWERPC64 && reload_completed"
  20866. +  [(parallel [(set (match_dup 3)
  20867. +           (compare:CC (plus:DI (match_dup 1)
  20868. +                    (const_int -1))
  20869. +                   (const_int 0)))
  20870. +          (set (match_dup 0)
  20871. +           (plus:DI (match_dup 1)
  20872. +                (const_int -1)))])
  20873. +   (set (pc) (if_then_else (match_dup 7)
  20874. +               (match_dup 5)
  20875. +               (match_dup 6)))]
  20876. +  "
  20877. +{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
  20878. +             const0_rtx); }")
  20879. +
  20880. +(define_split
  20881. +  [(set (pc)
  20882. +    (if_then_else (match_operator 2 "comparison_operator"
  20883. +                      [(match_operand:DI 1 "gpc_reg_operand" "")
  20884. +                       (const_int 1)])
  20885. +              (match_operand 5 "" "")
  20886. +              (match_operand 6 "" "")))
  20887. +   (set (match_operand:DI 0 "general_operand" "")
  20888. +    (plus:DI (match_dup 1) (const_int -1)))
  20889. +   (clobber (match_scratch:CC 3 ""))
  20890. +   (clobber (match_scratch:DI 4 ""))]
  20891. +  "TARGET_POWERPC64 && reload_completed
  20892. +   && ! gpc_reg_operand (operands[0], DImode)"
  20893. +  [(parallel [(set (match_dup 3)
  20894. +           (compare:CC (plus:DI (match_dup 1)
  20895. +                    (const_int -1))
  20896. +                   (const_int 0)))
  20897. +          (set (match_dup 4)
  20898. +           (plus:DI (match_dup 1)
  20899. +                (const_int -1)))])
  20900. +   (set (match_dup 0)
  20901. +    (match_dup 4))
  20902. +   (set (pc) (if_then_else (match_dup 7)
  20903. +               (match_dup 5)
  20904. +               (match_dup 6)))]
  20905. +  "
  20906. +{ operands[7] = gen_rtx (GET_CODE (operands[2]), VOIDmode, operands[3],
  20907. +             const0_rtx); }")
  20908. +
  20909. +(define_insn "trap"
  20910. +  [(trap_if (const_int 1) (const_int 0))]
  20911. +  ""
  20912. +  "{t 31,0,0|trap}")
  20913. +
  20914. +(define_expand "conditional_trap"
  20915. +  [(trap_if (match_operator 0 "trap_comparison_operator"
  20916. +                [(match_dup 2) (match_dup 3)])
  20917. +        (match_operand 1 "const_int_operand" ""))]
  20918. +  ""
  20919. +  "if (rs6000_compare_fp_p || operands[1] != const0_rtx) FAIL;
  20920. +   operands[2] = rs6000_compare_op0;
  20921. +   operands[3] = rs6000_compare_op1;")
  20922. +
  20923. +(define_insn ""
  20924. +  [(trap_if (match_operator 0 "trap_comparison_operator"
  20925. +                            [(match_operand:SI 1 "register_operand" "r")
  20926. +                             (match_operand:SI 2 "reg_or_short_operand" "rI")])
  20927. +        (const_int 0))]
  20928. +  ""
  20929. +  "t%V0%I2 %1,%2")
  20930. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/sol2.h gcc-2.95.3/gcc/config/rs6000/sol2.h
  20931. --- gcc-2.95.3-orig/gcc/config/rs6000/sol2.h    1999-01-11 14:34:11.000000000 +0100
  20932. +++ gcc-2.95.3/gcc/config/rs6000/sol2.h    2003-12-06 18:30:48.000000000 +0100
  20933. @@ -60,7 +60,7 @@
  20934.  #define    CPP_OS_DEFAULT_SPEC "%(cpp_os_solaris)"
  20935.  
  20936.  #undef    LINK_OS_DEFAULT_SPEC
  20937. -#define    LINK_OS_DEFAULT_SPEC "%(link_os_solaris)"
  20938. +#define    LINK_OS_DEFAULT_SPEC "-L/gcc/local/lib"
  20939.  
  20940.  #undef    CPP_ENDIAN_LITTLE_SPEC
  20941.  #define    CPP_ENDIAN_LITTLE_SPEC CPP_ENDIAN_SOLARIS_SPEC
  20942. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/t-amigaos gcc-2.95.3/gcc/config/rs6000/t-amigaos
  20943. --- gcc-2.95.3-orig/gcc/config/rs6000/t-amigaos    1970-01-01 01:00:00.000000000 +0100
  20944. +++ gcc-2.95.3/gcc/config/rs6000/t-amigaos    2003-12-06 20:01:51.000000000 +0100
  20945. @@ -0,0 +1,27 @@
  20946. +# Do not build libgcc1.
  20947. +LIBGCC1 =
  20948. +CROSS_LIBGCC1 =
  20949. +
  20950. +# These are really part of libgcc1, but this will cause them to be
  20951. +# built correctly, so... [taken from t-sparclite]
  20952. +LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
  20953. +
  20954. +dp-bit.c: $(srcdir)/config/fp-bit.c
  20955. +    cat $(srcdir)/config/fp-bit.c > dp-bit.c
  20956. +
  20957. +fp-bit.c: $(srcdir)/config/fp-bit.c
  20958. +    echo '#define FLOAT' > fp-bit.c
  20959. +    cat $(srcdir)/config/fp-bit.c >> fp-bit.c
  20960. +
  20961. +amigaos.o: $(srcdir)/config/rs6000/amigaos.c
  20962. +    $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
  20963. +
  20964. +# Build the libraries for both hard and soft floating point
  20965. +
  20966. +MULTILIB_OPTIONS = msoft-float mcpu=common
  20967. +MULTILIB_DIRNAMES = soft-float common
  20968. +
  20969. +SYSTEM_HEADER_DIR=gcc:os-include
  20970. +
  20971. +# FIXME: do this
  20972. +USE_COLLECT2 =
  20973. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/xm-amigaos.h gcc-2.95.3/gcc/config/rs6000/xm-amigaos.h
  20974. --- gcc-2.95.3-orig/gcc/config/rs6000/xm-amigaos.h    1970-01-01 01:00:00.000000000 +0100
  20975. +++ gcc-2.95.3/gcc/config/rs6000/xm-amigaos.h    2003-12-04 13:58:52.000000000 +0100
  20976. @@ -0,0 +1,31 @@
  20977. +/* Configuration for GNU C-compiler for AmigaOS host.
  20978. +   Copyright (C) 1997 Free Software Foundation, Inc.
  20979. +
  20980. +This file is part of GNU CC.
  20981. +
  20982. +GNU CC is free software; you can redistribute it and/or modify
  20983. +it under the terms of the GNU General Public License as published by
  20984. +the Free Software Foundation; either version 2, or (at your option)
  20985. +any later version.
  20986. +
  20987. +GNU CC is distributed in the hope that it will be useful,
  20988. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  20989. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20990. +GNU General Public License for more details.
  20991. +
  20992. +You should have received a copy of the GNU General Public License
  20993. +along with GNU CC; see the file COPYING.  If not, write to
  20994. +the Free Software Foundation, 59 Temple Place - Suite 330,
  20995. +Boston, MA 02111-1307, USA.  */
  20996. +
  20997. +#include "rs6000/xm-sysv4.h"
  20998. +
  20999. +#define STANDARD_INCLUDE_DIR "/gcc/include"
  21000. +#define SYSTEM_INCLUDE_DIR "/gcc/os-include"
  21001. +
  21002. +#define DIR_SEPERATOR '/'
  21003. +
  21004. +#define PATH_SEPERATOR ';'
  21005. +
  21006. +#undef HAVE_GETWD
  21007. +#undef HAVE_SYS_WAIT_H
  21008. diff -urNEBb gcc-2.95.3-orig/gcc/config/rs6000/xm-macosx.h gcc-2.95.3/gcc/config/rs6000/xm-macosx.h
  21009. --- gcc-2.95.3-orig/gcc/config/rs6000/xm-macosx.h    1970-01-01 01:00:00.000000000 +0100
  21010. +++ gcc-2.95.3/gcc/config/rs6000/xm-macosx.h    2003-12-02 17:50:55.000000000 +0100
  21011. @@ -0,0 +1,3 @@
  21012. +#include "rs6000/xm-rs6000.h"
  21013. +
  21014. +#undef USG
  21015. diff -urNEBb gcc-2.95.3-orig/gcc/config.in gcc-2.95.3/gcc/config.in
  21016. --- gcc-2.95.3-orig/gcc/config.in    2001-03-16 15:13:48.000000000 +0100
  21017. +++ gcc-2.95.3/gcc/config.in    2003-12-03 14:00:10.000000000 +0100
  21018. @@ -1,4 +1,4 @@
  21019. -/* config.in.  Generated automatically from configure.in by autoheader.  */
  21020. +/* config.in.  Generated from configure.in by autoheader.  */
  21021.  /* Define if you can safely include both <string.h> and <strings.h>.  */
  21022.  #undef STRING_WITH_STRINGS
  21023.  
  21024. @@ -130,237 +130,283 @@
  21025.  /* Define to the version of the distribution.  */
  21026.  #undef VERSION
  21027.  
  21028. -/* Define if using alloca.c.  */
  21029. -#undef C_ALLOCA
  21030. -
  21031. -/* Define to empty if the keyword does not work.  */
  21032. -#undef const
  21033. -
  21034. -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
  21035. -   This function is required for alloca.c support on those systems.  */
  21036. +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
  21037. +   systems. This function is required for `alloca.c' support on those systems.
  21038. +   */
  21039.  #undef CRAY_STACKSEG_END
  21040.  
  21041. -/* Define if you have alloca, as a function or macro.  */
  21042. -#undef HAVE_ALLOCA
  21043. -
  21044. -/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
  21045. -#undef HAVE_ALLOCA_H
  21046. -
  21047. -/* Define if you don't have vprintf but do have _doprnt.  */
  21048. -#undef HAVE_DOPRNT
  21049. -
  21050. -/* Define if you have a working `mmap' system call.  */
  21051. -#undef HAVE_MMAP
  21052. -
  21053. -/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
  21054. -#undef HAVE_SYS_WAIT_H
  21055. -
  21056. -/* Define if you have <vfork.h>.  */
  21057. -#undef HAVE_VFORK_H
  21058. -
  21059. -/* Define if you have the vprintf function.  */
  21060. -#undef HAVE_VPRINTF
  21061. -
  21062. -/* Define as __inline if that's what the C compiler calls it.  */
  21063. -#undef inline
  21064. -
  21065. -/* Define to `long' if <sys/types.h> doesn't define.  */
  21066. -#undef off_t
  21067. -
  21068. -/* Define to `int' if <sys/types.h> doesn't define.  */
  21069. -#undef pid_t
  21070. +/* Define to 1 if using `alloca.c'. */
  21071. +#undef C_ALLOCA
  21072.  
  21073. -/* Define to `unsigned' if <sys/types.h> doesn't define.  */
  21074. -#undef size_t
  21075. +/* Define to 1 if you have `alloca', as a function or macro. */
  21076. +#undef HAVE_ALLOCA
  21077.  
  21078. -/* If using the C implementation of alloca, define if you know the
  21079. -   direction of stack growth for your system; otherwise it will be
  21080. -   automatically deduced at run-time.
  21081. - STACK_DIRECTION > 0 => grows toward higher addresses
  21082. - STACK_DIRECTION < 0 => grows toward lower addresses
  21083. - STACK_DIRECTION = 0 => direction of growth unknown
  21084. +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
  21085.   */
  21086. -#undef STACK_DIRECTION
  21087. -
  21088. -/* Define if you have the ANSI C header files.  */
  21089. -#undef STDC_HEADERS
  21090. -
  21091. -/* Define if `sys_siglist' is declared by <signal.h>.  */
  21092. -#undef SYS_SIGLIST_DECLARED
  21093. -
  21094. -/* Define if you can safely include both <sys/time.h> and <time.h>.  */
  21095. -#undef TIME_WITH_SYS_TIME
  21096. -
  21097. -/* Define vfork as fork if vfork does not work.  */
  21098. -#undef vfork
  21099. -
  21100. -/* Define if you have the __argz_count function.  */
  21101. -#undef HAVE___ARGZ_COUNT
  21102. -
  21103. -/* Define if you have the __argz_next function.  */
  21104. -#undef HAVE___ARGZ_NEXT
  21105. +#undef HAVE_ALLOCA_H
  21106.  
  21107. -/* Define if you have the __argz_stringify function.  */
  21108. -#undef HAVE___ARGZ_STRINGIFY
  21109. +/* Define to 1 if you have the <argz.h> header file. */
  21110. +#undef HAVE_ARGZ_H
  21111.  
  21112. -/* Define if you have the atoll function.  */
  21113. +/* Define to 1 if you have the `atoll' function. */
  21114.  #undef HAVE_ATOLL
  21115.  
  21116. -/* Define if you have the atoq function.  */
  21117. +/* Define to 1 if you have the `atoq' function. */
  21118.  #undef HAVE_ATOQ
  21119.  
  21120. -/* Define if you have the bcmp function.  */
  21121. +/* Define to 1 if you have the `bcmp' function. */
  21122.  #undef HAVE_BCMP
  21123.  
  21124. -/* Define if you have the bcopy function.  */
  21125. +/* Define to 1 if you have the `bcopy' function. */
  21126.  #undef HAVE_BCOPY
  21127.  
  21128. -/* Define if you have the bsearch function.  */
  21129. +/* Define to 1 if you have the `bsearch' function. */
  21130.  #undef HAVE_BSEARCH
  21131.  
  21132. -/* Define if you have the bzero function.  */
  21133. +/* Define to 1 if you have the `bzero' function. */
  21134.  #undef HAVE_BZERO
  21135.  
  21136. -/* Define if you have the dcgettext function.  */
  21137. +/* Define to 1 if you have the `dcgettext' function. */
  21138.  #undef HAVE_DCGETTEXT
  21139.  
  21140. -/* Define if you have the fputc_unlocked function.  */
  21141. +/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you
  21142. +   don't. */
  21143. +#undef HAVE_DECL_SYS_SIGLIST
  21144. +
  21145. +/* Define to 1 if you have the <direct.h> header file. */
  21146. +#undef HAVE_DIRECT_H
  21147. +
  21148. +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
  21149. +#undef HAVE_DOPRNT
  21150. +
  21151. +/* Define to 1 if you have the <fcntl.h> header file. */
  21152. +#undef HAVE_FCNTL_H
  21153. +
  21154. +/* Define to 1 if you have the `fork' function. */
  21155. +#undef HAVE_FORK
  21156. +
  21157. +/* Define to 1 if you have the `fputc_unlocked' function. */
  21158.  #undef HAVE_FPUTC_UNLOCKED
  21159.  
  21160. -/* Define if you have the fputs_unlocked function.  */
  21161. +/* Define to 1 if you have the `fputs_unlocked' function. */
  21162.  #undef HAVE_FPUTS_UNLOCKED
  21163.  
  21164. -/* Define if you have the getcwd function.  */
  21165. +/* Define to 1 if you have the `getcwd' function. */
  21166.  #undef HAVE_GETCWD
  21167.  
  21168. -/* Define if you have the getpagesize function.  */
  21169. +/* Define to 1 if you have the `getpagesize' function. */
  21170.  #undef HAVE_GETPAGESIZE
  21171.  
  21172. -/* Define if you have the getrlimit function.  */
  21173. +/* Define to 1 if you have the `getrlimit' function. */
  21174.  #undef HAVE_GETRLIMIT
  21175.  
  21176. -/* Define if you have the gettimeofday function.  */
  21177. +/* Define to 1 if you have the `gettimeofday' function. */
  21178.  #undef HAVE_GETTIMEOFDAY
  21179.  
  21180. -/* Define if you have the index function.  */
  21181. +/* Define to 1 if you have the `index' function. */
  21182.  #undef HAVE_INDEX
  21183.  
  21184. -/* Define if you have the isascii function.  */
  21185. +/* Define to 1 if you have the <inttypes.h> header file. */
  21186. +#undef HAVE_INTTYPES_H
  21187. +
  21188. +/* Define to 1 if you have the `isascii' function. */
  21189.  #undef HAVE_ISASCII
  21190.  
  21191. -/* Define if you have the kill function.  */
  21192. +/* Define to 1 if you have the `kill' function. */
  21193.  #undef HAVE_KILL
  21194.  
  21195. -/* Define if you have the munmap function.  */
  21196. +/* Define to 1 if you have the `i' library (-li). */
  21197. +#undef HAVE_LIBI
  21198. +
  21199. +/* Define to 1 if you have the <limits.h> header file. */
  21200. +#undef HAVE_LIMITS_H
  21201. +
  21202. +/* Define to 1 if you have the <locale.h> header file. */
  21203. +#undef HAVE_LOCALE_H
  21204. +
  21205. +/* Define to 1 if you have the <malloc.h> header file. */
  21206. +#undef HAVE_MALLOC_H
  21207. +
  21208. +/* Define to 1 if you have the <memory.h> header file. */
  21209. +#undef HAVE_MEMORY_H
  21210. +
  21211. +/* Define to 1 if you have a working `mmap' system call. */
  21212. +#undef HAVE_MMAP
  21213. +
  21214. +/* Define to 1 if you have the `munmap' function. */
  21215.  #undef HAVE_MUNMAP
  21216.  
  21217. -/* Define if you have the popen function.  */
  21218. +/* Define to 1 if you have the <nl_types.h> header file. */
  21219. +#undef HAVE_NL_TYPES_H
  21220. +
  21221. +/* Define to 1 if you have the `popen' function. */
  21222.  #undef HAVE_POPEN
  21223.  
  21224. -/* Define if you have the putc_unlocked function.  */
  21225. +/* Define to 1 if you have the `putc_unlocked' function. */
  21226.  #undef HAVE_PUTC_UNLOCKED
  21227.  
  21228. -/* Define if you have the putenv function.  */
  21229. +/* Define to 1 if you have the `putenv' function. */
  21230.  #undef HAVE_PUTENV
  21231.  
  21232. -/* Define if you have the rindex function.  */
  21233. +/* Define to 1 if you have the `rindex' function. */
  21234.  #undef HAVE_RINDEX
  21235.  
  21236. -/* Define if you have the setenv function.  */
  21237. +/* Define to 1 if you have the `setenv' function. */
  21238.  #undef HAVE_SETENV
  21239.  
  21240. -/* Define if you have the setlocale function.  */
  21241. +/* Define to 1 if you have the `setlocale' function. */
  21242.  #undef HAVE_SETLOCALE
  21243.  
  21244. -/* Define if you have the setrlimit function.  */
  21245. +/* Define to 1 if you have the `setrlimit' function. */
  21246.  #undef HAVE_SETRLIMIT
  21247.  
  21248. -/* Define if you have the stpcpy function.  */
  21249. +/* Define to 1 if you have the <stab.h> header file. */
  21250. +#undef HAVE_STAB_H
  21251. +
  21252. +/* Define to 1 if you have the <stddef.h> header file. */
  21253. +#undef HAVE_STDDEF_H
  21254. +
  21255. +/* Define to 1 if you have the <stdint.h> header file. */
  21256. +#undef HAVE_STDINT_H
  21257. +
  21258. +/* Define to 1 if you have the <stdlib.h> header file. */
  21259. +#undef HAVE_STDLIB_H
  21260. +
  21261. +/* Define to 1 if you have the `stpcpy' function. */
  21262.  #undef HAVE_STPCPY
  21263.  
  21264. -/* Define if you have the strcasecmp function.  */
  21265. +/* Define to 1 if you have the `strcasecmp' function. */
  21266.  #undef HAVE_STRCASECMP
  21267.  
  21268. -/* Define if you have the strchr function.  */
  21269. +/* Define to 1 if you have the `strchr' function. */
  21270.  #undef HAVE_STRCHR
  21271.  
  21272. -/* Define if you have the strdup function.  */
  21273. +/* Define to 1 if you have the `strdup' function. */
  21274.  #undef HAVE_STRDUP
  21275.  
  21276. -/* Define if you have the strerror function.  */
  21277. +/* Define to 1 if you have the `strerror' function. */
  21278.  #undef HAVE_STRERROR
  21279.  
  21280. -/* Define if you have the strrchr function.  */
  21281. +/* Define to 1 if you have the <strings.h> header file. */
  21282. +#undef HAVE_STRINGS_H
  21283. +
  21284. +/* Define to 1 if you have the <string.h> header file. */
  21285. +#undef HAVE_STRING_H
  21286. +
  21287. +/* Define to 1 if you have the `strrchr' function. */
  21288.  #undef HAVE_STRRCHR
  21289.  
  21290. -/* Define if you have the strsignal function.  */
  21291. +/* Define to 1 if you have the `strsignal' function. */
  21292.  #undef HAVE_STRSIGNAL
  21293.  
  21294. -/* Define if you have the strtoul function.  */
  21295. +/* Define to 1 if you have the `strtoul' function. */
  21296.  #undef HAVE_STRTOUL
  21297.  
  21298. -/* Define if you have the sysconf function.  */
  21299. +/* Define to 1 if you have the `sysconf' function. */
  21300.  #undef HAVE_SYSCONF
  21301.  
  21302. -/* Define if you have the <argz.h> header file.  */
  21303. -#undef HAVE_ARGZ_H
  21304. +/* Define to 1 if you have the <sys/file.h> header file. */
  21305. +#undef HAVE_SYS_FILE_H
  21306.  
  21307. -/* Define if you have the <direct.h> header file.  */
  21308. -#undef HAVE_DIRECT_H
  21309. +/* Define to 1 if you have the <sys/param.h> header file. */
  21310. +#undef HAVE_SYS_PARAM_H
  21311.  
  21312. -/* Define if you have the <fcntl.h> header file.  */
  21313. -#undef HAVE_FCNTL_H
  21314. +/* Define to 1 if you have the <sys/resource.h> header file. */
  21315. +#undef HAVE_SYS_RESOURCE_H
  21316.  
  21317. -/* Define if you have the <limits.h> header file.  */
  21318. -#undef HAVE_LIMITS_H
  21319. +/* Define to 1 if you have the <sys/stat.h> header file. */
  21320. +#undef HAVE_SYS_STAT_H
  21321.  
  21322. -/* Define if you have the <locale.h> header file.  */
  21323. -#undef HAVE_LOCALE_H
  21324. +/* Define to 1 if you have the <sys/times.h> header file. */
  21325. +#undef HAVE_SYS_TIMES_H
  21326.  
  21327. -/* Define if you have the <malloc.h> header file.  */
  21328. -#undef HAVE_MALLOC_H
  21329. +/* Define to 1 if you have the <sys/time.h> header file. */
  21330. +#undef HAVE_SYS_TIME_H
  21331.  
  21332. -/* Define if you have the <nl_types.h> header file.  */
  21333. -#undef HAVE_NL_TYPES_H
  21334. +/* Define to 1 if you have the <sys/types.h> header file. */
  21335. +#undef HAVE_SYS_TYPES_H
  21336.  
  21337. -/* Define if you have the <stab.h> header file.  */
  21338. -#undef HAVE_STAB_H
  21339. +/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
  21340. +#undef HAVE_SYS_WAIT_H
  21341.  
  21342. -/* Define if you have the <stddef.h> header file.  */
  21343. -#undef HAVE_STDDEF_H
  21344. +/* Define to 1 if you have the <time.h> header file. */
  21345. +#undef HAVE_TIME_H
  21346.  
  21347. -/* Define if you have the <stdlib.h> header file.  */
  21348. -#undef HAVE_STDLIB_H
  21349. +/* Define to 1 if you have the <unistd.h> header file. */
  21350. +#undef HAVE_UNISTD_H
  21351.  
  21352. -/* Define if you have the <string.h> header file.  */
  21353. -#undef HAVE_STRING_H
  21354. +/* Define to 1 if you have the `vfork' function. */
  21355. +#undef HAVE_VFORK
  21356.  
  21357. -/* Define if you have the <strings.h> header file.  */
  21358. -#undef HAVE_STRINGS_H
  21359. +/* Define to 1 if you have the <vfork.h> header file. */
  21360. +#undef HAVE_VFORK_H
  21361.  
  21362. -/* Define if you have the <sys/file.h> header file.  */
  21363. -#undef HAVE_SYS_FILE_H
  21364. +/* Define to 1 if you have the `vprintf' function. */
  21365. +#undef HAVE_VPRINTF
  21366.  
  21367. -/* Define if you have the <sys/param.h> header file.  */
  21368. -#undef HAVE_SYS_PARAM_H
  21369. +/* Define to 1 if `fork' works. */
  21370. +#undef HAVE_WORKING_FORK
  21371.  
  21372. -/* Define if you have the <sys/resource.h> header file.  */
  21373. -#undef HAVE_SYS_RESOURCE_H
  21374. +/* Define to 1 if `vfork' works. */
  21375. +#undef HAVE_WORKING_VFORK
  21376.  
  21377. -/* Define if you have the <sys/stat.h> header file.  */
  21378. -#undef HAVE_SYS_STAT_H
  21379. +/* Define to 1 if you have the `__argz_count' function. */
  21380. +#undef HAVE___ARGZ_COUNT
  21381.  
  21382. -/* Define if you have the <sys/time.h> header file.  */
  21383. -#undef HAVE_SYS_TIME_H
  21384. +/* Define to 1 if you have the `__argz_next' function. */
  21385. +#undef HAVE___ARGZ_NEXT
  21386.  
  21387. -/* Define if you have the <sys/times.h> header file.  */
  21388. -#undef HAVE_SYS_TIMES_H
  21389. +/* Define to 1 if you have the `__argz_stringify' function. */
  21390. +#undef HAVE___ARGZ_STRINGIFY
  21391.  
  21392. -/* Define if you have the <time.h> header file.  */
  21393. -#undef HAVE_TIME_H
  21394. +/* Define to the address where bug reports for this package should be sent. */
  21395. +#undef PACKAGE_BUGREPORT
  21396.  
  21397. -/* Define if you have the <unistd.h> header file.  */
  21398. -#undef HAVE_UNISTD_H
  21399. +/* Define to the full name of this package. */
  21400. +#undef PACKAGE_NAME
  21401.  
  21402. -/* Define if you have the i library (-li).  */
  21403. -#undef HAVE_LIBI
  21404. +/* Define to the full name and version of this package. */
  21405. +#undef PACKAGE_STRING
  21406. +
  21407. +/* Define to the one symbol short name of this package. */
  21408. +#undef PACKAGE_TARNAME
  21409. +
  21410. +/* Define to the version of this package. */
  21411. +#undef PACKAGE_VERSION
  21412. +
  21413. +/* If using the C implementation of alloca, define if you know the
  21414. +   direction of stack growth for your system; otherwise it will be
  21415. +   automatically deduced at run-time.
  21416. +        STACK_DIRECTION > 0 => grows toward higher addresses
  21417. +        STACK_DIRECTION < 0 => grows toward lower addresses
  21418. +        STACK_DIRECTION = 0 => direction of growth unknown */
  21419. +#undef STACK_DIRECTION
  21420. +
  21421. +/* Define to 1 if you have the ANSI C header files. */
  21422. +#undef STDC_HEADERS
  21423. +
  21424. +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
  21425. +#undef TIME_WITH_SYS_TIME
  21426. +
  21427. +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
  21428. +   `char[]'. */
  21429. +#undef YYTEXT_POINTER
  21430. +
  21431. +/* Define to empty if `const' does not conform to ANSI C. */
  21432. +#undef const
  21433. +
  21434. +/* Define as `__inline' if that's what the C compiler calls it, or to nothing
  21435. +   if it is not supported. */
  21436. +#undef inline
  21437. +
  21438. +/* Define to `long' if <sys/types.h> does not define. */
  21439. +#undef off_t
  21440. +
  21441. +/* Define to `int' if <sys/types.h> does not define. */
  21442. +#undef pid_t
  21443. +
  21444. +/* Define to `unsigned' if <sys/types.h> does not define. */
  21445. +#undef size_t
  21446. +
  21447. +/* Define as `fork' if `vfork' does not work. */
  21448. +#undef vfork
  21449. diff -urNEBb gcc-2.95.3-orig/gcc/config.in~ gcc-2.95.3/gcc/config.in~
  21450. --- gcc-2.95.3-orig/gcc/config.in~    1970-01-01 01:00:00.000000000 +0100
  21451. +++ gcc-2.95.3/gcc/config.in~    2003-12-02 17:50:55.000000000 +0100
  21452. @@ -0,0 +1,396 @@
  21453. +/* config.in.  Generated automatically from configure.in by autoheader.  */
  21454. +/* Define if you can safely include both <string.h> and <strings.h>.  */
  21455. +#undef STRING_WITH_STRINGS
  21456. +
  21457. +/* Define if printf supports "%p".  */
  21458. +#undef HAVE_PRINTF_PTR
  21459. +
  21460. +/* Define if you want expensive run-time checks. */
  21461. +#undef ENABLE_CHECKING
  21462. +
  21463. +/* Define to 1 if NLS is requested.  */
  21464. +#undef ENABLE_NLS
  21465. +
  21466. +/* Define as 1 if you have catgets and don't want to use GNU gettext.  */
  21467. +#undef HAVE_CATGETS
  21468. +
  21469. +/* Define as 1 if you have gettext and don't want to use GNU gettext.  */
  21470. +#undef HAVE_GETTEXT
  21471. +
  21472. +/* Define if your cpp understands the stringify operator.  */
  21473. +#undef HAVE_CPP_STRINGIFY
  21474. +
  21475. +/* Define if your compiler understands volatile.  */
  21476. +#undef HAVE_VOLATILE
  21477. +
  21478. +/* Define if your assembler supports specifying the maximum number
  21479. +   of bytes to skip when using the GAS .p2align command. */
  21480. +#undef HAVE_GAS_MAX_SKIP_P2ALIGN
  21481. +
  21482. +/* Define if your assembler supports .balign and .p2align.  */
  21483. +#undef HAVE_GAS_BALIGN_AND_P2ALIGN
  21484. +
  21485. +/* Define if your assembler supports .subsection and .subsection -1 starts
  21486. +   emitting at the beginning of your section */
  21487. +#undef HAVE_GAS_SUBSECTION_ORDERING
  21488. +
  21489. +/* Define if your assembler uses the old HImode fild and fist notation.  */
  21490. +#undef HAVE_GAS_FILDS_FISTS
  21491. +
  21492. +/* Define if you have a working <inttypes.h> header file.  */
  21493. +#undef HAVE_INTTYPES_H
  21494. +
  21495. +/* Define if your locale.h file contains LC_MESSAGES.  */
  21496. +#undef HAVE_LC_MESSAGES
  21497. +
  21498. +/* Define as 1 if you have the stpcpy function.  */
  21499. +#undef HAVE_STPCPY
  21500. +
  21501. +/* Whether malloc must be declared even if <stdlib.h> is included.  */
  21502. +#undef NEED_DECLARATION_MALLOC
  21503. +
  21504. +/* Whether realloc must be declared even if <stdlib.h> is included.  */
  21505. +#undef NEED_DECLARATION_REALLOC
  21506. +
  21507. +/* Whether calloc must be declared even if <stdlib.h> is included.  */
  21508. +#undef NEED_DECLARATION_CALLOC
  21509. +
  21510. +/* Whether free must be declared even if <stdlib.h> is included.  */
  21511. +#undef NEED_DECLARATION_FREE
  21512. +
  21513. +/* Whether bcopy must be declared even if <string.h> is included.  */
  21514. +#undef NEED_DECLARATION_BCOPY
  21515. +
  21516. +/* Whether bcmp must be declared even if <string.h> is included.  */
  21517. +#undef NEED_DECLARATION_BCMP
  21518. +
  21519. +/* Whether bzero must be declared even if <string.h> is included.  */
  21520. +#undef NEED_DECLARATION_BZERO
  21521. +
  21522. +/* Whether index must be declared even if <string.h> is included.  */
  21523. +#undef NEED_DECLARATION_INDEX
  21524. +
  21525. +/* Whether rindex must be declared even if <string.h> is included.  */
  21526. +#undef NEED_DECLARATION_RINDEX
  21527. +
  21528. +/* Whether getenv must be declared even if <stdlib.h> is included.  */
  21529. +#undef NEED_DECLARATION_GETENV
  21530. +
  21531. +/* Whether atol must be declared even if <stdlib.h> is included.  */
  21532. +#undef NEED_DECLARATION_ATOL
  21533. +
  21534. +/* Whether atof must be declared even if <stdlib.h> is included.  */
  21535. +#undef NEED_DECLARATION_ATOF
  21536. +
  21537. +/* Whether sbrk must be declared even if <stdlib.h> is included.  */
  21538. +#undef NEED_DECLARATION_SBRK
  21539. +
  21540. +/* Whether abort must be declared even if <stdlib.h> is included.  */
  21541. +#undef NEED_DECLARATION_ABORT
  21542. +
  21543. +/* Whether strerror must be declared even if <string.h> is included.  */
  21544. +#undef NEED_DECLARATION_STRERROR
  21545. +
  21546. +/* Whether strsignal must be declared even if <string.h> is included.  */
  21547. +#undef NEED_DECLARATION_STRSIGNAL
  21548. +
  21549. +/* Whether strstr must be declared even if <string.h> is included.  */
  21550. +#undef NEED_DECLARATION_STRSTR
  21551. +
  21552. +/* Whether getcwd must be declared even if <unistd.h> is included.  */
  21553. +#undef NEED_DECLARATION_GETCWD
  21554. +
  21555. +/* Whether getwd must be declared even if <unistd.h> is included.  */
  21556. +#undef NEED_DECLARATION_GETWD
  21557. +
  21558. +/* Whether getrlimit must be declared even if <sys/resource.h> is included.  */
  21559. +#undef NEED_DECLARATION_GETRLIMIT
  21560. +
  21561. +/* Whether setrlimit must be declared even if <sys/resource.h> is included.  */
  21562. +#undef NEED_DECLARATION_SETRLIMIT
  21563. +
  21564. +/* Whether putc_unlocked must be declared even if <stdio.h> is included.  */
  21565. +#undef NEED_DECLARATION_PUTC_UNLOCKED
  21566. +
  21567. +/* Whether fputs_unlocked must be declared even if <stdio.h> is included.  */
  21568. +#undef NEED_DECLARATION_FPUTS_UNLOCKED
  21569. +
  21570. +/* Define to enable the use of a default assembler. */
  21571. +#undef DEFAULT_ASSEMBLER
  21572. +
  21573. +/* Define to enable the use of a default linker. */
  21574. +#undef DEFAULT_LINKER
  21575. +
  21576. +/* Define if host mkdir takes a single argument. */
  21577. +#undef MKDIR_TAKES_ONE_ARG
  21578. +
  21579. +/* Define to the name of the distribution.  */
  21580. +#undef PACKAGE
  21581. +
  21582. +/* Define to the version of the distribution.  */
  21583. +#undef VERSION
  21584. +
  21585. +
  21586. +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
  21587. +   systems. This function is required for `alloca.c' support on those systems.
  21588. +   */
  21589. +#undef CRAY_STACKSEG_END
  21590. +
  21591. +/* Define if using `alloca.c'. */
  21592. +#undef C_ALLOCA
  21593. +
  21594. +/* Define if you have `alloca', as a function or macro. */
  21595. +#undef HAVE_ALLOCA
  21596. +
  21597. +/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
  21598. +#undef HAVE_ALLOCA_H
  21599. +
  21600. +/* Define if you have the <argz.h> header file. */
  21601. +#undef HAVE_ARGZ_H
  21602. +
  21603. +/* Define if you have the `atoll' function. */
  21604. +#undef HAVE_ATOLL
  21605. +
  21606. +/* Define if you have the `atoq' function. */
  21607. +#undef HAVE_ATOQ
  21608. +
  21609. +/* Define if you have the `bcmp' function. */
  21610. +#undef HAVE_BCMP
  21611. +
  21612. +/* Define if you have the `bcopy' function. */
  21613. +#undef HAVE_BCOPY
  21614. +
  21615. +/* Define if you have the `bsearch' function. */
  21616. +#undef HAVE_BSEARCH
  21617. +
  21618. +/* Define if you have the `bzero' function. */
  21619. +#undef HAVE_BZERO
  21620. +
  21621. +/* Define if you have the `dcgettext' function. */
  21622. +#undef HAVE_DCGETTEXT
  21623. +
  21624. +/* Define if you have the <direct.h> header file. */
  21625. +#undef HAVE_DIRECT_H
  21626. +
  21627. +/* Define if you don't have `vprintf' but do have `_doprnt.' */
  21628. +#undef HAVE_DOPRNT
  21629. +
  21630. +/* Define if you have the <fcntl.h> header file. */
  21631. +#undef HAVE_FCNTL_H
  21632. +
  21633. +/* Define if you have the `fork' function. */
  21634. +#undef HAVE_FORK
  21635. +
  21636. +/* Define if you have the `fputc_unlocked' function. */
  21637. +#undef HAVE_FPUTC_UNLOCKED
  21638. +
  21639. +/* Define if you have the `fputs_unlocked' function. */
  21640. +#undef HAVE_FPUTS_UNLOCKED
  21641. +
  21642. +/* Define if you have the `getcwd' function. */
  21643. +#undef HAVE_GETCWD
  21644. +
  21645. +/* Define if you have the `getpagesize' function. */
  21646. +#undef HAVE_GETPAGESIZE
  21647. +
  21648. +/* Define if you have the `getrlimit' function. */
  21649. +#undef HAVE_GETRLIMIT
  21650. +
  21651. +/* Define if you have the `gettimeofday' function. */
  21652. +#undef HAVE_GETTIMEOFDAY
  21653. +
  21654. +/* Define if you have the `index' function. */
  21655. +#undef HAVE_INDEX
  21656. +
  21657. +/* Define if you have the <inttypes.h> header file. */
  21658. +#undef HAVE_INTTYPES_H
  21659. +
  21660. +/* Define if you have the `isascii' function. */
  21661. +#undef HAVE_ISASCII
  21662. +
  21663. +/* Define if you have the `kill' function. */
  21664. +#undef HAVE_KILL
  21665. +
  21666. +/* Define if you have the `i' library (-li). */
  21667. +#undef HAVE_LIBI
  21668. +
  21669. +/* Define if you have the <limits.h> header file. */
  21670. +#undef HAVE_LIMITS_H
  21671. +
  21672. +/* Define if you have the <locale.h> header file. */
  21673. +#undef HAVE_LOCALE_H
  21674. +
  21675. +/* Define if you have the <malloc.h> header file. */
  21676. +#undef HAVE_MALLOC_H
  21677. +
  21678. +/* Define if you have the <memory.h> header file. */
  21679. +#undef HAVE_MEMORY_H
  21680. +
  21681. +/* Define if you have a working `mmap' system call. */
  21682. +#undef HAVE_MMAP
  21683. +
  21684. +/* Define if you have the `munmap' function. */
  21685. +#undef HAVE_MUNMAP
  21686. +
  21687. +/* Define if you have the <nl_types.h> header file. */
  21688. +#undef HAVE_NL_TYPES_H
  21689. +
  21690. +/* Define if you have the `popen' function. */
  21691. +#undef HAVE_POPEN
  21692. +
  21693. +/* Define if you have the `putc_unlocked' function. */
  21694. +#undef HAVE_PUTC_UNLOCKED
  21695. +
  21696. +/* Define if you have the `putenv' function. */
  21697. +#undef HAVE_PUTENV
  21698. +
  21699. +/* Define if you have the `rindex' function. */
  21700. +#undef HAVE_RINDEX
  21701. +
  21702. +/* Define if you have the `setenv' function. */
  21703. +#undef HAVE_SETENV
  21704. +
  21705. +/* Define if you have the `setlocale' function. */
  21706. +#undef HAVE_SETLOCALE
  21707. +
  21708. +/* Define if you have the `setrlimit' function. */
  21709. +#undef HAVE_SETRLIMIT
  21710. +
  21711. +/* Define if you have the <stab.h> header file. */
  21712. +#undef HAVE_STAB_H
  21713. +
  21714. +/* Define if you have the <stddef.h> header file. */
  21715. +#undef HAVE_STDDEF_H
  21716. +
  21717. +/* Define if you have the <stdint.h> header file. */
  21718. +#undef HAVE_STDINT_H
  21719. +
  21720. +/* Define if you have the <stdlib.h> header file. */
  21721. +#undef HAVE_STDLIB_H
  21722. +
  21723. +/* Define if you have the `stpcpy' function. */
  21724. +#undef HAVE_STPCPY
  21725. +
  21726. +/* Define if you have the `strcasecmp' function. */
  21727. +#undef HAVE_STRCASECMP
  21728. +
  21729. +/* Define if you have the `strchr' function. */
  21730. +#undef HAVE_STRCHR
  21731. +
  21732. +/* Define if you have the `strdup' function. */
  21733. +#undef HAVE_STRDUP
  21734. +
  21735. +/* Define if you have the `strerror' function. */
  21736. +#undef HAVE_STRERROR
  21737. +
  21738. +/* Define if you have the <strings.h> header file. */
  21739. +#undef HAVE_STRINGS_H
  21740. +
  21741. +/* Define if you have the <string.h> header file. */
  21742. +#undef HAVE_STRING_H
  21743. +
  21744. +/* Define if you have the `strrchr' function. */
  21745. +#undef HAVE_STRRCHR
  21746. +
  21747. +/* Define if you have the `strsignal' function. */
  21748. +#undef HAVE_STRSIGNAL
  21749. +
  21750. +/* Define if you have the `strtoul' function. */
  21751. +#undef HAVE_STRTOUL
  21752. +
  21753. +/* Define if you have the `sysconf' function. */
  21754. +#undef HAVE_SYSCONF
  21755. +
  21756. +/* Define if you have the <sys/file.h> header file.  */
  21757. +#undef HAVE_SYS_FILE_H
  21758. +
  21759. +/* Define if you have the <sys/param.h> header file.  */
  21760. +#undef HAVE_SYS_PARAM_H
  21761. +
  21762. +/* Define if you have the <sys/resource.h> header file.  */
  21763. +#undef HAVE_SYS_RESOURCE_H
  21764. +
  21765. +/* Define if you have the <sys/stat.h> header file.  */
  21766. +#undef HAVE_SYS_STAT_H
  21767. +
  21768. +/* Define if you have the <sys/times.h> header file. */
  21769. +#undef HAVE_SYS_TIMES_H
  21770. +
  21771. +/* Define if you have the <sys/time.h> header file.  */
  21772. +#undef HAVE_SYS_TIME_H
  21773. +
  21774. +/* Define if you have the <sys/types.h> header file. */
  21775. +#undef HAVE_SYS_TYPES_H
  21776. +
  21777. +/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
  21778. +#undef HAVE_SYS_WAIT_H
  21779. +
  21780. +/* Define if you have the <time.h> header file.  */
  21781. +#undef HAVE_TIME_H
  21782. +
  21783. +/* Define if you have the <unistd.h> header file.  */
  21784. +#undef HAVE_UNISTD_H
  21785. +
  21786. +/* Define if you have the `vfork' function. */
  21787. +#undef HAVE_VFORK
  21788. +
  21789. +/* Define if you have the <vfork.h> header file. */
  21790. +#undef HAVE_VFORK_H
  21791. +
  21792. +/* Define if you have the `vprintf' function. */
  21793. +#undef HAVE_VPRINTF
  21794. +
  21795. +/* Define if `fork' works. */
  21796. +#undef HAVE_WORKING_FORK
  21797. +
  21798. +/* Define if `vfork' works. */
  21799. +#undef HAVE_WORKING_VFORK
  21800. +
  21801. +/* Define if you have the `__argz_count' function. */
  21802. +#undef HAVE___ARGZ_COUNT
  21803. +
  21804. +/* Define if you have the `__argz_next' function. */
  21805. +#undef HAVE___ARGZ_NEXT
  21806. +
  21807. +/* Define if you have the `__argz_stringify' function. */
  21808. +#undef HAVE___ARGZ_STRINGIFY
  21809. +
  21810. +/* If using the C implementation of alloca, define if you know the
  21811. +   direction of stack growth for your system; otherwise it will be
  21812. +   automatically deduced at run-time.
  21813. +        STACK_DIRECTION > 0 => grows toward higher addresses
  21814. +        STACK_DIRECTION < 0 => grows toward lower addresses
  21815. +        STACK_DIRECTION = 0 => direction of growth unknown */
  21816. +#undef STACK_DIRECTION
  21817. +
  21818. +/* Define if you have the ANSI C header files. */
  21819. +#undef STDC_HEADERS
  21820. +
  21821. +/* Define if `sys_siglist' is declared by <signal.h> or <unistd.h>. */
  21822. +#undef SYS_SIGLIST_DECLARED
  21823. +
  21824. +/* Define if you can safely include both <sys/time.h> and <time.h>. */
  21825. +#undef TIME_WITH_SYS_TIME
  21826. +
  21827. +/* Define if `lex' declares `yytext' as a `char *' by default, not a `char[]'.
  21828. +   */
  21829. +#undef YYTEXT_POINTER
  21830. +
  21831. +/* Define to empty if `const' does not conform to ANSI C. */
  21832. +#undef const
  21833. +
  21834. +/* Define as `__inline' if that's what the C compiler calls it, or to nothing
  21835. +   if it is not supported. */
  21836. +#undef inline
  21837. +
  21838. +/* Define to `long' if <sys/types.h> does not define. */
  21839. +#undef off_t
  21840. +
  21841. +/* Define to `int' if <sys/types.h> does not define. */
  21842. +#undef pid_t
  21843. +
  21844. +/* Define to `unsigned' if <sys/types.h> does not define. */
  21845. +#undef size_t
  21846. +
  21847. +/* Define as `fork' if `vfork' does not work. */
  21848. +#undef vfork
  21849. diff -urNEBb gcc-2.95.3-orig/gcc/configure gcc-2.95.3/gcc/configure
  21850. --- gcc-2.95.3-orig/gcc/configure    2001-03-16 15:13:48.000000000 +0100
  21851. +++ gcc-2.95.3/gcc/configure    2003-12-02 17:50:54.000000000 +0100
  21852. @@ -1,85 +1,324 @@
  21853.  #! /bin/sh
  21854. -
  21855.  # Guess values for system-dependent variables and create Makefiles.
  21856. -# Generated automatically using autoconf version 2.13 
  21857. -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
  21858. +# Generated by GNU Autoconf 2.57.
  21859.  #
  21860. +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
  21861. +# Free Software Foundation, Inc.
  21862.  # This configure script is free software; the Free Software Foundation
  21863.  # gives unlimited permission to copy, distribute and modify it.
  21864. +## --------------------- ##
  21865. +## M4sh Initialization.  ##
  21866. +## --------------------- ##
  21867. +
  21868. +# Be Bourne compatible
  21869. +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  21870. +  emulate sh
  21871. +  NULLCMD=:
  21872. +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  21873. +  # is contrary to our usage.  Disable this feature.
  21874. +  alias -g '${1+"$@"}'='"$@"'
  21875. +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  21876. +  set -o posix
  21877. +fi
  21878. +
  21879. +# Support unset when possible.
  21880. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  21881. +  as_unset=unset
  21882. +else
  21883. +  as_unset=false
  21884. +fi
  21885. +
  21886. +
  21887. +# Work around bugs in pre-3.0 UWIN ksh.
  21888. +$as_unset ENV MAIL MAILPATH
  21889. +PS1='$ '
  21890. +PS2='> '
  21891. +PS4='+ '
  21892. +
  21893. +# NLS nuisances.
  21894. +for as_var in \
  21895. +  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
  21896. +  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
  21897. +  LC_TELEPHONE LC_TIME
  21898. +do
  21899. +  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
  21900. +    eval $as_var=C; export $as_var
  21901. +  else
  21902. +    $as_unset $as_var
  21903. +  fi
  21904. +done
  21905. +
  21906. +# Required to use basename.
  21907. +if expr a : '\(a\)' >/dev/null 2>&1; then
  21908. +  as_expr=expr
  21909. +else
  21910. +  as_expr=false
  21911. +fi
  21912. +
  21913. +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
  21914. +  as_basename=basename
  21915. +else
  21916. +  as_basename=false
  21917. +fi
  21918. +
  21919. +
  21920. +# Name of the executable.
  21921. +as_me=`$as_basename "$0" ||
  21922. +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
  21923. +     X"$0" : 'X\(//\)$' \| \
  21924. +     X"$0" : 'X\(/\)$' \| \
  21925. +     .     : '\(.\)' 2>/dev/null ||
  21926. +echo X/"$0" |
  21927. +    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
  21928. +        /^X\/\(\/\/\)$/{ s//\1/; q; }
  21929. +        /^X\/\(\/\).*/{ s//\1/; q; }
  21930. +        s/.*/./; q'`
  21931. +
  21932. +
  21933. +# PATH needs CR, and LINENO needs CR and PATH.
  21934. +# Avoid depending upon Character Ranges.
  21935. +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  21936. +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  21937. +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  21938. +as_cr_digits='0123456789'
  21939. +as_cr_alnum=$as_cr_Letters$as_cr_digits
  21940. +
  21941. +# The user is always right.
  21942. +if test "${PATH_SEPARATOR+set}" != set; then
  21943. +  echo "#! /bin/sh" >conf$$.sh
  21944. +  echo  "exit 0"   >>conf$$.sh
  21945. +  chmod +x conf$$.sh
  21946. +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  21947. +    PATH_SEPARATOR=';'
  21948. +  else
  21949. +    PATH_SEPARATOR=:
  21950. +  fi
  21951. +  rm -f conf$$.sh
  21952. +fi
  21953. +
  21954. +
  21955. +  as_lineno_1=$LINENO
  21956. +  as_lineno_2=$LINENO
  21957. +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  21958. +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  21959. +  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  21960. +  # Find who we are.  Look in the path if we contain no path at all
  21961. +  # relative or not.
  21962. +  case $0 in
  21963. +    *[\\/]* ) as_myself=$0 ;;
  21964. +    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  21965. +for as_dir in $PATH
  21966. +do
  21967. +  IFS=$as_save_IFS
  21968. +  test -z "$as_dir" && as_dir=.
  21969. +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  21970. +done
  21971. +
  21972. +       ;;
  21973. +  esac
  21974. +  # We did not find ourselves, most probably we were run as `sh COMMAND'
  21975. +  # in which case we are not to be found in the path.
  21976. +  if test "x$as_myself" = x; then
  21977. +    as_myself=$0
  21978. +  fi
  21979. +  if test ! -f "$as_myself"; then
  21980. +    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
  21981. +   { (exit 1); exit 1; }; }
  21982. +  fi
  21983. +  case $CONFIG_SHELL in
  21984. +  '')
  21985. +    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  21986. +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
  21987. +do
  21988. +  IFS=$as_save_IFS
  21989. +  test -z "$as_dir" && as_dir=.
  21990. +  for as_base in sh bash ksh sh5; do
  21991. +     case $as_dir in
  21992. +     /*)
  21993. +       if ("$as_dir/$as_base" -c '
  21994. +  as_lineno_1=$LINENO
  21995. +  as_lineno_2=$LINENO
  21996. +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  21997. +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  21998. +  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  21999. +         $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  22000. +         $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  22001. +         CONFIG_SHELL=$as_dir/$as_base
  22002. +         export CONFIG_SHELL
  22003. +         exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  22004. +       fi;;
  22005. +     esac
  22006. +       done
  22007. +done
  22008. +;;
  22009. +  esac
  22010. +
  22011. +  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
  22012. +  # uniformly replaced by the line number.  The first 'sed' inserts a
  22013. +  # line-number line before each line; the second 'sed' does the real
  22014. +  # work.  The second script uses 'N' to pair each line-number line
  22015. +  # with the numbered line, and appends trailing '-' during
  22016. +  # substitution so that $LINENO is not a special case at line end.
  22017. +  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  22018. +  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  22019. +  sed '=' <$as_myself |
  22020. +    sed '
  22021. +      N
  22022. +      s,$,-,
  22023. +      : loop
  22024. +      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  22025. +      t loop
  22026. +      s,-$,,
  22027. +      s,^['$as_cr_digits']*\n,,
  22028. +    ' >$as_me.lineno &&
  22029. +  chmod +x $as_me.lineno ||
  22030. +    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
  22031. +   { (exit 1); exit 1; }; }
  22032. +
  22033. +  # Don't try to exec as it changes $[0], causing all sort of problems
  22034. +  # (the dirname of $[0] is not the place where we might find the
  22035. +  # original and so on.  Autoconf is especially sensible to this).
  22036. +  . ./$as_me.lineno
  22037. +  # Exit status is that of the last command.
  22038. +  exit
  22039. +}
  22040. +
  22041. +
  22042. +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  22043. +  *c*,-n*) ECHO_N= ECHO_C='
  22044. +' ECHO_T='    ' ;;
  22045. +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  22046. +  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  22047. +esac
  22048. +
  22049. +if expr a : '\(a\)' >/dev/null 2>&1; then
  22050. +  as_expr=expr
  22051. +else
  22052. +  as_expr=false
  22053. +fi
  22054. +
  22055. +rm -f conf$$ conf$$.exe conf$$.file
  22056. +echo >conf$$.file
  22057. +if ln -s conf$$.file conf$$ 2>/dev/null; then
  22058. +  # We could just check for DJGPP; but this test a) works b) is more generic
  22059. +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  22060. +  if test -f conf$$.exe; then
  22061. +    # Don't use ln at all; we don't have any links
  22062. +    as_ln_s='cp -p'
  22063. +  else
  22064. +    as_ln_s='ln -s'
  22065. +  fi
  22066. +elif ln conf$$.file conf$$ 2>/dev/null; then
  22067. +  as_ln_s=ln
  22068. +else
  22069. +  as_ln_s='cp -p'
  22070. +fi
  22071. +rm -f conf$$ conf$$.exe conf$$.file
  22072. +
  22073. +if mkdir -p . 2>/dev/null; then
  22074. +  as_mkdir_p=:
  22075. +else
  22076. +  as_mkdir_p=false
  22077. +fi
  22078. +
  22079. +as_executable_p="test -f"
  22080. +
  22081. +# Sed expression to map a string onto a valid CPP name.
  22082. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  22083. +
  22084. +# Sed expression to map a string onto a valid variable name.
  22085. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  22086. +
  22087.  
  22088. -# Defaults:
  22089. -ac_help=
  22090. +# IFS
  22091. +# We need space, tab and new line, in precisely that order.
  22092. +as_nl='
  22093. +'
  22094. +IFS="     $as_nl"
  22095. +
  22096. +# CDPATH.
  22097. +$as_unset CDPATH
  22098. +
  22099. +
  22100. +# Name of the host.
  22101. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  22102. +# so uname gets run too.
  22103. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  22104. +
  22105. +exec 6>&1
  22106. +
  22107. +#
  22108. +# Initializations.
  22109. +#
  22110.  ac_default_prefix=/usr/local
  22111. -# Any additions from configure.in:
  22112. -ac_help="$ac_help
  22113. -  --with-gnu-ld           arrange to work with GNU ld."
  22114. -ac_help="$ac_help
  22115. -  --with-ld               arrange to use the specified ld (full pathname)."
  22116. -ac_help="$ac_help
  22117. -  --with-gnu-as           arrange to work with GNU as."
  22118. -ac_help="$ac_help
  22119. -  --with-as               arrange to use the specified as (full pathname)."
  22120. -ac_help="$ac_help
  22121. -  --with-stabs            arrange to use stabs instead of host debug format."
  22122. -ac_help="$ac_help
  22123. -  --with-elf              arrange to use ELF instead of host debug format."
  22124. -ac_help="$ac_help
  22125. -  --with-local-prefix=DIR specifies directory to put local include."
  22126. -ac_help="$ac_help
  22127. -  --with-gxx-include-dir=DIR
  22128. -                          specifies directory to put g++ header files."
  22129. -ac_help="$ac_help
  22130. -  --enable-checking       enable expensive run-time checks."
  22131. -ac_help="$ac_help
  22132. -  --disable-cpp           don't provide a user-visible C preprocessor."
  22133. -ac_help="$ac_help
  22134. -  --with-cpp-install-dir=DIR
  22135. -                          install the user visible C preprocessor in DIR
  22136. -                          (relative to PREFIX) as well as PREFIX/bin."
  22137. -ac_help="$ac_help
  22138. -  --enable-cpplib         use cpplib for the C preprocessor."
  22139. -ac_help="$ac_help
  22140. -  --enable-c-cpplib       link cpplib directly into C and C++ compilers
  22141. -                          (EXPERIMENTAL) (implies --enable-cpplib)."
  22142. -ac_help="$ac_help
  22143. -  --enable-c-mbchar       enable multibyte characters for C and C++."
  22144. -ac_help="$ac_help
  22145. -  --disable-fast-fixincludes
  22146. -                         Disable the new fast fixincludes.
  22147. -                         Run the old fixincludes script unconditionally"
  22148. -ac_help="$ac_help
  22149. -  --enable-haifa          use the experimental scheduler.
  22150. -  --disable-haifa         don't use the experimental scheduler for the
  22151. -                          targets which normally enable it."
  22152. -ac_help="$ac_help
  22153. -  --enable-threads        enable thread usage for target GCC.
  22154. -  --enable-threads=LIB    use LIB thread package for target GCC."
  22155. -ac_help="$ac_help
  22156. -  --enable-objc-gc      enable the use of Boehm's garbage collector with
  22157. -              the GNU Objective-C runtime."
  22158. -ac_help="$ac_help
  22159. -  --enable-java-gc=TYPE   choose garbage collector [boehm]"
  22160. -ac_help="$ac_help
  22161. -  --enable-dwarf2      enable DWARF2 debugging as default."
  22162. -ac_help="$ac_help
  22163. -  --enable-nls            use Native Language Support (disabled by default).
  22164. -                          EXPERIMENTAL, see ABOUT-GCC-NLS."
  22165. -ac_help="$ac_help
  22166. -  --disable-nls           do not use Native Language Support"
  22167. -ac_help="$ac_help
  22168. -  --with-included-gettext use the GNU gettext library included here"
  22169. -ac_help="$ac_help
  22170. -  --with-catgets          use catgets functions if available"
  22171. +ac_config_libobj_dir=.
  22172. +cross_compiling=no
  22173. +subdirs=
  22174. +MFLAGS=
  22175. +MAKEFLAGS=
  22176. +SHELL=${CONFIG_SHELL-/bin/sh}
  22177. +
  22178. +# Maximum number of lines to put in a shell here document.
  22179. +# This variable seems obsolete.  It should probably be removed, and
  22180. +# only ac_max_sed_lines should be used.
  22181. +: ${ac_max_here_lines=38}
  22182. +
  22183. +# Identity of this package.
  22184. +PACKAGE_NAME=
  22185. +PACKAGE_TARNAME=
  22186. +PACKAGE_VERSION=
  22187. +PACKAGE_STRING=
  22188. +PACKAGE_BUGREPORT=
  22189. +
  22190. +ac_unique_file="tree.c"
  22191. +# Factoring default headers for most tests.
  22192. +ac_includes_default="\
  22193. +#include <stdio.h>
  22194. +#if HAVE_SYS_TYPES_H
  22195. +# include <sys/types.h>
  22196. +#endif
  22197. +#if HAVE_SYS_STAT_H
  22198. +# include <sys/stat.h>
  22199. +#endif
  22200. +#if STDC_HEADERS
  22201. +# include <stdlib.h>
  22202. +# include <stddef.h>
  22203. +#else
  22204. +# if HAVE_STDLIB_H
  22205. +#  include <stdlib.h>
  22206. +# endif
  22207. +#endif
  22208. +#if HAVE_STRING_H
  22209. +# if !STDC_HEADERS && HAVE_MEMORY_H
  22210. +#  include <memory.h>
  22211. +# endif
  22212. +# include <string.h>
  22213. +#endif
  22214. +#if HAVE_STRINGS_H
  22215. +# include <strings.h>
  22216. +#endif
  22217. +#if HAVE_INTTYPES_H
  22218. +# include <inttypes.h>
  22219. +#else
  22220. +# if HAVE_STDINT_H
  22221. +#  include <stdint.h>
  22222. +# endif
  22223. +#endif
  22224. +#if HAVE_UNISTD_H
  22225. +# include <unistd.h>
  22226. +#endif"
  22227. +
  22228. +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT stage1_warn_cflags SET_MAKE AWK LEX LEXLIB LEX_OUTPUT_ROOT LN LN_S RANLIB ac_ct_RANLIB YACC INSTALL INSTALL_PROGRAM INSTALL_DATA CPP EGREP gnat vfprintf doprint manext objext PACKAGE VERSION ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT GENCAT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l gthread_flags build_canonical host_canonical target_subdir inhibit_libc sched_prefix sched_cflags gcc_tooldir dollar objdir subdirs all_boot_languages all_compilers all_diff_excludes all_headers all_lang_makefiles all_languages all_lib2funcs all_stagestuff build_exeext build_install_headers_dir build_xm_file_list cc_set_by_configure quoted_cc_set_by_configure cpp_install_dir cpp_main dep_host_xmake_file dep_tmake_file extra_c_flags extra_c_objs extra_cpp_objs extra_cxx_objs extra_headers_list extra_objs extra_parts extra_passes extra_programs fixinc_defs float_h_file gcc_gxx_include_dir gcc_version gcc_version_trigger host_exeext host_extra_gcc_objs host_xm_file_list install JAVAGC lang_options_files lang_specs_files lang_tree_files local_prefix maybe_use_collect2 md_file objc_boehm_gc out_file out_object_file stage_prefix_set_by_configure symbolic_link thread_file tm_file_list will_use_collect2 cross_defines LIBOBJS LTLIBOBJS'
  22229. +ac_subst_files='target_overrides host_overrides cross_overrides build_overrides language_fragments language_hooks'
  22230.  
  22231.  # Initialize some variables set by options.
  22232. +ac_init_help=
  22233. +ac_init_version=false
  22234.  # The variables have the same names as the options, with
  22235.  # dashes changed to underlines.
  22236. -build=NONE
  22237. -cache_file=./config.cache
  22238. +cache_file=/dev/null
  22239.  exec_prefix=NONE
  22240. -host=NONE
  22241.  no_create=
  22242. -nonopt=NONE
  22243.  no_recursion=
  22244.  prefix=NONE
  22245.  program_prefix=NONE
  22246. @@ -88,10 +327,15 @@
  22247.  silent=
  22248.  site=
  22249.  srcdir=
  22250. -target=NONE
  22251.  verbose=
  22252.  x_includes=NONE
  22253.  x_libraries=NONE
  22254. +
  22255. +# Installation directory options.
  22256. +# These are left unexpanded so users can "make install exec_prefix=/foo"
  22257. +# and all the variables that are supposed to be based on exec_prefix
  22258. +# by default will actually change.
  22259. +# Use braces instead of parens because sh, perl, etc. also accept them.
  22260.  bindir='${exec_prefix}/bin'
  22261.  sbindir='${exec_prefix}/sbin'
  22262.  libexecdir='${exec_prefix}/libexec'
  22263. @@ -105,13 +349,6 @@
  22264.  infodir='${prefix}/info'
  22265.  mandir='${prefix}/man'
  22266.  
  22267. -# Initialize some other variables.
  22268. -subdirs=
  22269. -MFLAGS= MAKEFLAGS=
  22270. -SHELL=${CONFIG_SHELL-/bin/sh}
  22271. -# Maximum number of lines to put in a shell here document.
  22272. -ac_max_here_lines=12
  22273. -
  22274.  ac_prev=
  22275.  for ac_option
  22276.  do
  22277. @@ -123,59 +360,59 @@
  22278.      continue
  22279.    fi
  22280.  
  22281. -  case "$ac_option" in
  22282. -  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  22283. -  *) ac_optarg= ;;
  22284. -  esac
  22285. +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
  22286.  
  22287.    # Accept the important Cygnus configure options, so we can diagnose typos.
  22288.  
  22289. -  case "$ac_option" in
  22290. +  case $ac_option in
  22291.  
  22292.    -bindir | --bindir | --bindi | --bind | --bin | --bi)
  22293.      ac_prev=bindir ;;
  22294.    -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  22295. -    bindir="$ac_optarg" ;;
  22296. +    bindir=$ac_optarg ;;
  22297.  
  22298.    -build | --build | --buil | --bui | --bu)
  22299. -    ac_prev=build ;;
  22300. +    ac_prev=build_alias ;;
  22301.    -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  22302. -    build="$ac_optarg" ;;
  22303. +    build_alias=$ac_optarg ;;
  22304.  
  22305.    -cache-file | --cache-file | --cache-fil | --cache-fi \
  22306.    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
  22307.      ac_prev=cache_file ;;
  22308.    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
  22309.    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  22310. -    cache_file="$ac_optarg" ;;
  22311. +    cache_file=$ac_optarg ;;
  22312. +
  22313. +  --config-cache | -C)
  22314. +    cache_file=config.cache ;;
  22315.  
  22316.    -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
  22317.      ac_prev=datadir ;;
  22318.    -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
  22319.    | --da=*)
  22320. -    datadir="$ac_optarg" ;;
  22321. +    datadir=$ac_optarg ;;
  22322.  
  22323.    -disable-* | --disable-*)
  22324. -    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
  22325. +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
  22326.      # Reject names that are not valid shell variable names.
  22327. -    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
  22328. -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  22329. -    fi
  22330. -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  22331. -    eval "enable_${ac_feature}=no" ;;
  22332. +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  22333. +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  22334. +   { (exit 1); exit 1; }; }
  22335. +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  22336. +    eval "enable_$ac_feature=no" ;;
  22337.  
  22338.    -enable-* | --enable-*)
  22339. -    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
  22340. +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
  22341.      # Reject names that are not valid shell variable names.
  22342. -    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
  22343. -      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
  22344. -    fi
  22345. -    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
  22346. -    case "$ac_option" in
  22347. -      *=*) ;;
  22348. +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  22349. +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  22350. +   { (exit 1); exit 1; }; }
  22351. +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  22352. +    case $ac_option in
  22353. +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
  22354.        *) ac_optarg=yes ;;
  22355.      esac
  22356. -    eval "enable_${ac_feature}='$ac_optarg'" ;;
  22357. +    eval "enable_$ac_feature='$ac_optarg'" ;;
  22358.  
  22359.    -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  22360.    | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  22361. @@ -184,95 +421,47 @@
  22362.    -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  22363.    | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  22364.    | --exec=* | --exe=* | --ex=*)
  22365. -    exec_prefix="$ac_optarg" ;;
  22366. +    exec_prefix=$ac_optarg ;;
  22367.  
  22368.    -gas | --gas | --ga | --g)
  22369.      # Obsolete; use --with-gas.
  22370.      with_gas=yes ;;
  22371.  
  22372. -  -help | --help | --hel | --he)
  22373. -    # Omit some internal or obsolete options to make the list less imposing.
  22374. -    # This message is too long to be a string in the A/UX 3.1 sh.
  22375. -    cat << EOF
  22376. -Usage: configure [options] [host]
  22377. -Options: [defaults in brackets after descriptions]
  22378. -Configuration:
  22379. -  --cache-file=FILE       cache test results in FILE
  22380. -  --help                  print this message
  22381. -  --no-create             do not create output files
  22382. -  --quiet, --silent       do not print \`checking...' messages
  22383. -  --version               print the version of autoconf that created configure
  22384. -Directory and file names:
  22385. -  --prefix=PREFIX         install architecture-independent files in PREFIX
  22386. -                          [$ac_default_prefix]
  22387. -  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  22388. -                          [same as prefix]
  22389. -  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  22390. -  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  22391. -  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  22392. -  --datadir=DIR           read-only architecture-independent data in DIR
  22393. -                          [PREFIX/share]
  22394. -  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  22395. -  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
  22396. -                          [PREFIX/com]
  22397. -  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  22398. -  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  22399. -  --includedir=DIR        C header files in DIR [PREFIX/include]
  22400. -  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  22401. -  --infodir=DIR           info documentation in DIR [PREFIX/info]
  22402. -  --mandir=DIR            man documentation in DIR [PREFIX/man]
  22403. -  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  22404. -  --program-prefix=PREFIX prepend PREFIX to installed program names
  22405. -  --program-suffix=SUFFIX append SUFFIX to installed program names
  22406. -  --program-transform-name=PROGRAM
  22407. -                          run sed PROGRAM on installed program names
  22408. -EOF
  22409. -    cat << EOF
  22410. -Host type:
  22411. -  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  22412. -  --host=HOST             configure for HOST [guessed]
  22413. -  --target=TARGET         configure for TARGET [TARGET=HOST]
  22414. -Features and packages:
  22415. -  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  22416. -  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  22417. -  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  22418. -  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  22419. -  --x-includes=DIR        X include files are in DIR
  22420. -  --x-libraries=DIR       X library files are in DIR
  22421. -EOF
  22422. -    if test -n "$ac_help"; then
  22423. -      echo "--enable and --with options recognized:$ac_help"
  22424. -    fi
  22425. -    exit 0 ;;
  22426. +  -help | --help | --hel | --he | -h)
  22427. +    ac_init_help=long ;;
  22428. +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  22429. +    ac_init_help=recursive ;;
  22430. +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  22431. +    ac_init_help=short ;;
  22432.  
  22433.    -host | --host | --hos | --ho)
  22434. -    ac_prev=host ;;
  22435. +    ac_prev=host_alias ;;
  22436.    -host=* | --host=* | --hos=* | --ho=*)
  22437. -    host="$ac_optarg" ;;
  22438. +    host_alias=$ac_optarg ;;
  22439.  
  22440.    -includedir | --includedir | --includedi | --included | --include \
  22441.    | --includ | --inclu | --incl | --inc)
  22442.      ac_prev=includedir ;;
  22443.    -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
  22444.    | --includ=* | --inclu=* | --incl=* | --inc=*)
  22445. -    includedir="$ac_optarg" ;;
  22446. +    includedir=$ac_optarg ;;
  22447.  
  22448.    -infodir | --infodir | --infodi | --infod | --info | --inf)
  22449.      ac_prev=infodir ;;
  22450.    -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  22451. -    infodir="$ac_optarg" ;;
  22452. +    infodir=$ac_optarg ;;
  22453.  
  22454.    -libdir | --libdir | --libdi | --libd)
  22455.      ac_prev=libdir ;;
  22456.    -libdir=* | --libdir=* | --libdi=* | --libd=*)
  22457. -    libdir="$ac_optarg" ;;
  22458. +    libdir=$ac_optarg ;;
  22459.  
  22460.    -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
  22461.    | --libexe | --libex | --libe)
  22462.      ac_prev=libexecdir ;;
  22463.    -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
  22464.    | --libexe=* | --libex=* | --libe=*)
  22465. -    libexecdir="$ac_optarg" ;;
  22466. +    libexecdir=$ac_optarg ;;
  22467.  
  22468.    -localstatedir | --localstatedir | --localstatedi | --localstated \
  22469.    | --localstate | --localstat | --localsta | --localst \
  22470. @@ -281,19 +470,19 @@
  22471.    -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  22472.    | --localstate=* | --localstat=* | --localsta=* | --localst=* \
  22473.    | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  22474. -    localstatedir="$ac_optarg" ;;
  22475. +    localstatedir=$ac_optarg ;;
  22476.  
  22477.    -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
  22478.      ac_prev=mandir ;;
  22479.    -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  22480. -    mandir="$ac_optarg" ;;
  22481. +    mandir=$ac_optarg ;;
  22482.  
  22483.    -nfp | --nfp | --nf)
  22484.      # Obsolete; use --without-fp.
  22485.      with_fp=no ;;
  22486.  
  22487.    -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  22488. -  | --no-cr | --no-c)
  22489. +  | --no-cr | --no-c | -n)
  22490.      no_create=yes ;;
  22491.  
  22492.    -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  22493. @@ -307,26 +496,26 @@
  22494.    -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
  22495.    | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
  22496.    | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  22497. -    oldincludedir="$ac_optarg" ;;
  22498. +    oldincludedir=$ac_optarg ;;
  22499.  
  22500.    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
  22501.      ac_prev=prefix ;;
  22502.    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  22503. -    prefix="$ac_optarg" ;;
  22504. +    prefix=$ac_optarg ;;
  22505.  
  22506.    -program-prefix | --program-prefix | --program-prefi | --program-pref \
  22507.    | --program-pre | --program-pr | --program-p)
  22508.      ac_prev=program_prefix ;;
  22509.    -program-prefix=* | --program-prefix=* | --program-prefi=* \
  22510.    | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  22511. -    program_prefix="$ac_optarg" ;;
  22512. +    program_prefix=$ac_optarg ;;
  22513.  
  22514.    -program-suffix | --program-suffix | --program-suffi | --program-suff \
  22515.    | --program-suf | --program-su | --program-s)
  22516.      ac_prev=program_suffix ;;
  22517.    -program-suffix=* | --program-suffix=* | --program-suffi=* \
  22518.    | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  22519. -    program_suffix="$ac_optarg" ;;
  22520. +    program_suffix=$ac_optarg ;;
  22521.  
  22522.    -program-transform-name | --program-transform-name \
  22523.    | --program-transform-nam | --program-transform-na \
  22524. @@ -343,7 +532,7 @@
  22525.    | --program-transfo=* | --program-transf=* \
  22526.    | --program-trans=* | --program-tran=* \
  22527.    | --progr-tra=* | --program-tr=* | --program-t=*)
  22528. -    program_transform_name="$ac_optarg" ;;
  22529. +    program_transform_name=$ac_optarg ;;
  22530.  
  22531.    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  22532.    | -silent | --silent | --silen | --sile | --sil)
  22533. @@ -353,7 +542,7 @@
  22534.      ac_prev=sbindir ;;
  22535.    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
  22536.    | --sbi=* | --sb=*)
  22537. -    sbindir="$ac_optarg" ;;
  22538. +    sbindir=$ac_optarg ;;
  22539.  
  22540.    -sharedstatedir | --sharedstatedir | --sharedstatedi \
  22541.    | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  22542. @@ -364,58 +553,57 @@
  22543.    | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
  22544.    | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
  22545.    | --sha=* | --sh=*)
  22546. -    sharedstatedir="$ac_optarg" ;;
  22547. +    sharedstatedir=$ac_optarg ;;
  22548.  
  22549.    -site | --site | --sit)
  22550.      ac_prev=site ;;
  22551.    -site=* | --site=* | --sit=*)
  22552. -    site="$ac_optarg" ;;
  22553. +    site=$ac_optarg ;;
  22554.  
  22555.    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
  22556.      ac_prev=srcdir ;;
  22557.    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  22558. -    srcdir="$ac_optarg" ;;
  22559. +    srcdir=$ac_optarg ;;
  22560.  
  22561.    -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
  22562.    | --syscon | --sysco | --sysc | --sys | --sy)
  22563.      ac_prev=sysconfdir ;;
  22564.    -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
  22565.    | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  22566. -    sysconfdir="$ac_optarg" ;;
  22567. +    sysconfdir=$ac_optarg ;;
  22568.  
  22569.    -target | --target | --targe | --targ | --tar | --ta | --t)
  22570. -    ac_prev=target ;;
  22571. +    ac_prev=target_alias ;;
  22572.    -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  22573. -    target="$ac_optarg" ;;
  22574. +    target_alias=$ac_optarg ;;
  22575.  
  22576.    -v | -verbose | --verbose | --verbos | --verbo | --verb)
  22577.      verbose=yes ;;
  22578.  
  22579. -  -version | --version | --versio | --versi | --vers)
  22580. -    echo "configure generated by autoconf version 2.13"
  22581. -    exit 0 ;;
  22582. +  -version | --version | --versio | --versi | --vers | -V)
  22583. +    ac_init_version=: ;;
  22584.  
  22585.    -with-* | --with-*)
  22586. -    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  22587. +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
  22588.      # Reject names that are not valid shell variable names.
  22589. -    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
  22590. -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  22591. -    fi
  22592. +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  22593. +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  22594. +   { (exit 1); exit 1; }; }
  22595.      ac_package=`echo $ac_package| sed 's/-/_/g'`
  22596. -    case "$ac_option" in
  22597. -      *=*) ;;
  22598. +    case $ac_option in
  22599. +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
  22600.        *) ac_optarg=yes ;;
  22601.      esac
  22602. -    eval "with_${ac_package}='$ac_optarg'" ;;
  22603. +    eval "with_$ac_package='$ac_optarg'" ;;
  22604.  
  22605.    -without-* | --without-*)
  22606. -    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
  22607. +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
  22608.      # Reject names that are not valid shell variable names.
  22609. -    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
  22610. -      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
  22611. -    fi
  22612. -    ac_package=`echo $ac_package| sed 's/-/_/g'`
  22613. -    eval "with_${ac_package}=no" ;;
  22614. +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  22615. +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  22616. +   { (exit 1); exit 1; }; }
  22617. +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  22618. +    eval "with_$ac_package=no" ;;
  22619.  
  22620.    --x)
  22621.      # Obsolete; use --with-x.
  22622. @@ -426,99 +614,110 @@
  22623.      ac_prev=x_includes ;;
  22624.    -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  22625.    | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  22626. -    x_includes="$ac_optarg" ;;
  22627. +    x_includes=$ac_optarg ;;
  22628.  
  22629.    -x-libraries | --x-libraries | --x-librarie | --x-librari \
  22630.    | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
  22631.      ac_prev=x_libraries ;;
  22632.    -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  22633.    | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  22634. -    x_libraries="$ac_optarg" ;;
  22635. +    x_libraries=$ac_optarg ;;
  22636.  
  22637. -  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
  22638. +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  22639. +Try \`$0 --help' for more information." >&2
  22640. +   { (exit 1); exit 1; }; }
  22641.      ;;
  22642.  
  22643. +  *=*)
  22644. +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  22645. +    # Reject names that are not valid shell variable names.
  22646. +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  22647. +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  22648. +   { (exit 1); exit 1; }; }
  22649. +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  22650. +    eval "$ac_envvar='$ac_optarg'"
  22651. +    export $ac_envvar ;;
  22652. +
  22653.    *)
  22654. -    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
  22655. -      echo "configure: warning: $ac_option: invalid host type" 1>&2
  22656. -    fi
  22657. -    if test "x$nonopt" != xNONE; then
  22658. -      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
  22659. -    fi
  22660. -    nonopt="$ac_option"
  22661. +    # FIXME: should be removed in autoconf 3.0.
  22662. +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  22663. +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  22664. +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  22665. +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
  22666.      ;;
  22667.  
  22668.    esac
  22669.  done
  22670.  
  22671.  if test -n "$ac_prev"; then
  22672. -  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
  22673. -fi
  22674. -
  22675. -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  22676. -
  22677. -# File descriptor usage:
  22678. -# 0 standard input
  22679. -# 1 file creation
  22680. -# 2 errors and warnings
  22681. -# 3 some systems may open it to /dev/tty
  22682. -# 4 used on the Kubota Titan
  22683. -# 6 checking for... messages and results
  22684. -# 5 compiler messages saved in config.log
  22685. -if test "$silent" = yes; then
  22686. -  exec 6>/dev/null
  22687. -else
  22688. -  exec 6>&1
  22689. +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  22690. +  { echo "$as_me: error: missing argument to $ac_option" >&2
  22691. +   { (exit 1); exit 1; }; }
  22692.  fi
  22693. -exec 5>./config.log
  22694.  
  22695. -echo "\
  22696. -This file contains any messages produced by compilers while
  22697. -running configure, to aid debugging if configure makes a mistake.
  22698. -" 1>&5
  22699. +# Be sure to have absolute paths.
  22700. +for ac_var in exec_prefix prefix
  22701. +do
  22702. +  eval ac_val=$`echo $ac_var`
  22703. +  case $ac_val in
  22704. +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  22705. +    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  22706. +   { (exit 1); exit 1; }; };;
  22707. +  esac
  22708. +done
  22709.  
  22710. -# Strip out --no-create and --no-recursion so they do not pile up.
  22711. -# Also quote any args containing shell metacharacters.
  22712. -ac_configure_args=
  22713. -for ac_arg
  22714. +# Be sure to have absolute paths.
  22715. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  22716. +              localstatedir libdir includedir oldincludedir infodir mandir
  22717.  do
  22718. -  case "$ac_arg" in
  22719. -  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  22720. -  | --no-cr | --no-c) ;;
  22721. -  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  22722. -  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  22723. -  *" "*|*"    "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  22724. -  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  22725. -  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  22726. +  eval ac_val=$`echo $ac_var`
  22727. +  case $ac_val in
  22728. +    [\\/$]* | ?:[\\/]* ) ;;
  22729. +    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  22730. +   { (exit 1); exit 1; }; };;
  22731.    esac
  22732.  done
  22733.  
  22734. -# NLS nuisances.
  22735. -# Only set these to C if already set.  These must not be set unconditionally
  22736. -# because not all systems understand e.g. LANG=C (notably SCO).
  22737. -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
  22738. -# Non-C LC_CTYPE values break the ctype check.
  22739. -if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
  22740. -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
  22741. -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
  22742. -if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
  22743. +# There might be people who depend on the old broken behavior: `$host'
  22744. +# used to hold the argument of --host etc.
  22745. +# FIXME: To remove some day.
  22746. +build=$build_alias
  22747. +host=$host_alias
  22748. +target=$target_alias
  22749. +
  22750. +# FIXME: To remove some day.
  22751. +if test "x$host_alias" != x; then
  22752. +  if test "x$build_alias" = x; then
  22753. +    cross_compiling=maybe
  22754. +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  22755. +    If a cross compiler is detected then cross compile mode will be used." >&2
  22756. +  elif test "x$build_alias" != "x$host_alias"; then
  22757. +    cross_compiling=yes
  22758. +  fi
  22759. +fi
  22760.  
  22761. -# confdefs.h avoids OS command line length limits that DEFS can exceed.
  22762. -rm -rf conftest* confdefs.h
  22763. -# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  22764. -echo > confdefs.h
  22765. +ac_tool_prefix=
  22766. +test -n "$host_alias" && ac_tool_prefix=$host_alias-
  22767. +
  22768. +test "$silent" = yes && exec 6>/dev/null
  22769.  
  22770. -# A filename unique to this package, relative to the directory that
  22771. -# configure is in, which we can look for to find out if srcdir is correct.
  22772. -ac_unique_file=tree.c
  22773.  
  22774.  # Find the source files, if location was not specified.
  22775.  if test -z "$srcdir"; then
  22776.    ac_srcdir_defaulted=yes
  22777.    # Try the directory containing this script, then its parent.
  22778. -  ac_prog=$0
  22779. -  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  22780. -  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
  22781. +  ac_confdir=`(dirname "$0") 2>/dev/null ||
  22782. +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  22783. +         X"$0" : 'X\(//\)[^/]' \| \
  22784. +         X"$0" : 'X\(//\)$' \| \
  22785. +         X"$0" : 'X\(/\)' \| \
  22786. +         .     : '\(.\)' 2>/dev/null ||
  22787. +echo X"$0" |
  22788. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  22789. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  22790. +        /^X\(\/\/\)$/{ s//\1/; q; }
  22791. +        /^X\(\/\).*/{ s//\1/; q; }
  22792. +        s/.*/./; q'`
  22793.    srcdir=$ac_confdir
  22794.    if test ! -r $srcdir/$ac_unique_file; then
  22795.      srcdir=..
  22796. @@ -528,13 +727,470 @@
  22797.  fi
  22798.  if test ! -r $srcdir/$ac_unique_file; then
  22799.    if test "$ac_srcdir_defaulted" = yes; then
  22800. -    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  22801. +    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
  22802. +   { (exit 1); exit 1; }; }
  22803. +  else
  22804. +    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
  22805. +   { (exit 1); exit 1; }; }
  22806. +  fi
  22807. +fi
  22808. +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
  22809. +  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
  22810. +   { (exit 1); exit 1; }; }
  22811. +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  22812. +ac_env_build_alias_set=${build_alias+set}
  22813. +ac_env_build_alias_value=$build_alias
  22814. +ac_cv_env_build_alias_set=${build_alias+set}
  22815. +ac_cv_env_build_alias_value=$build_alias
  22816. +ac_env_host_alias_set=${host_alias+set}
  22817. +ac_env_host_alias_value=$host_alias
  22818. +ac_cv_env_host_alias_set=${host_alias+set}
  22819. +ac_cv_env_host_alias_value=$host_alias
  22820. +ac_env_target_alias_set=${target_alias+set}
  22821. +ac_env_target_alias_value=$target_alias
  22822. +ac_cv_env_target_alias_set=${target_alias+set}
  22823. +ac_cv_env_target_alias_value=$target_alias
  22824. +ac_env_CC_set=${CC+set}
  22825. +ac_env_CC_value=$CC
  22826. +ac_cv_env_CC_set=${CC+set}
  22827. +ac_cv_env_CC_value=$CC
  22828. +ac_env_CFLAGS_set=${CFLAGS+set}
  22829. +ac_env_CFLAGS_value=$CFLAGS
  22830. +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  22831. +ac_cv_env_CFLAGS_value=$CFLAGS
  22832. +ac_env_LDFLAGS_set=${LDFLAGS+set}
  22833. +ac_env_LDFLAGS_value=$LDFLAGS
  22834. +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  22835. +ac_cv_env_LDFLAGS_value=$LDFLAGS
  22836. +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  22837. +ac_env_CPPFLAGS_value=$CPPFLAGS
  22838. +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  22839. +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  22840. +ac_env_CPP_set=${CPP+set}
  22841. +ac_env_CPP_value=$CPP
  22842. +ac_cv_env_CPP_set=${CPP+set}
  22843. +ac_cv_env_CPP_value=$CPP
  22844. +
  22845. +#
  22846. +# Report the --help message.
  22847. +#
  22848. +if test "$ac_init_help" = "long"; then
  22849. +  # Omit some internal or obsolete options to make the list less imposing.
  22850. +  # This message is too long to be a string in the A/UX 3.1 sh.
  22851. +  cat <<_ACEOF
  22852. +\`configure' configures this package to adapt to many kinds of systems.
  22853. +
  22854. +Usage: $0 [OPTION]... [VAR=VALUE]...
  22855. +
  22856. +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  22857. +VAR=VALUE.  See below for descriptions of some of the useful variables.
  22858. +
  22859. +Defaults for the options are specified in brackets.
  22860. +
  22861. +Configuration:
  22862. +  -h, --help              display this help and exit
  22863. +      --help=short        display options specific to this package
  22864. +      --help=recursive    display the short help of all the included packages
  22865. +  -V, --version           display version information and exit
  22866. +  -q, --quiet, --silent   do not print \`checking...' messages
  22867. +      --cache-file=FILE   cache test results in FILE [disabled]
  22868. +  -C, --config-cache      alias for \`--cache-file=config.cache'
  22869. +  -n, --no-create         do not create output files
  22870. +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  22871. +
  22872. +_ACEOF
  22873. +
  22874. +  cat <<_ACEOF
  22875. +Installation directories:
  22876. +  --prefix=PREFIX         install architecture-independent files in PREFIX
  22877. +                          [$ac_default_prefix]
  22878. +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  22879. +                          [PREFIX]
  22880. +
  22881. +By default, \`make install' will install all the files in
  22882. +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  22883. +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  22884. +for instance \`--prefix=\$HOME'.
  22885. +
  22886. +For better control, use the options below.
  22887. +
  22888. +Fine tuning of the installation directories:
  22889. +  --bindir=DIR           user executables [EPREFIX/bin]
  22890. +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  22891. +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  22892. +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  22893. +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  22894. +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  22895. +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  22896. +  --libdir=DIR           object code libraries [EPREFIX/lib]
  22897. +  --includedir=DIR       C header files [PREFIX/include]
  22898. +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  22899. +  --infodir=DIR          info documentation [PREFIX/info]
  22900. +  --mandir=DIR           man documentation [PREFIX/man]
  22901. +_ACEOF
  22902. +
  22903. +  cat <<\_ACEOF
  22904. +
  22905. +System types:
  22906. +  --build=BUILD     configure for building on BUILD [guessed]
  22907. +  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
  22908. +  --target=TARGET   configure for building compilers for TARGET [HOST]
  22909. +_ACEOF
  22910. +fi
  22911. +
  22912. +if test -n "$ac_init_help"; then
  22913. +
  22914. +  cat <<\_ACEOF
  22915. +
  22916. +Optional Features:
  22917. +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  22918. +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  22919. +  --enable-checking       enable expensive run-time checks.
  22920. +  --disable-cpp           don't provide a user-visible C preprocessor.
  22921. +  --enable-cpplib         use cpplib for the C preprocessor.
  22922. +  --enable-c-cpplib       link cpplib directly into C and C++ compilers
  22923. +                          (EXPERIMENTAL) (implies --enable-cpplib).
  22924. +  --enable-c-mbchar       enable multibyte characters for C and C++.
  22925. +  --disable-fast-fixincludes
  22926. +                         Disable the new fast fixincludes.
  22927. +                         Run the old fixincludes script unconditionally
  22928. +  --enable-haifa          use the experimental scheduler.
  22929. +  --disable-haifa         don't use the experimental scheduler for the
  22930. +                          targets which normally enable it.
  22931. +  --enable-threads        enable thread usage for target GCC.
  22932. +  --enable-threads=LIB    use LIB thread package for target GCC.
  22933. +  --enable-objc-gc      enable the use of Boehm's garbage collector with
  22934. +              the GNU Objective-C runtime.
  22935. +  --enable-java-gc=TYPE   choose garbage collector boehm
  22936. +  --enable-nls            use Native Language Support (disabled by default).
  22937. +                          EXPERIMENTAL, see ABOUT-GCC-NLS.
  22938. +  --disable-nls           do not use Native Language Support
  22939. +
  22940. +Optional Packages:
  22941. +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  22942. +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  22943. +  --with-gnu-ld           arrange to work with GNU ld.
  22944. +  --with-ld               arrange to use the specified ld (full pathname).
  22945. +  --with-gnu-as           arrange to work with GNU as.
  22946. +  --with-as               arrange to use the specified as (full pathname).
  22947. +  --with-stabs            arrange to use stabs instead of host debug format.
  22948. +  --with-elf              arrange to use ELF instead of host debug format.
  22949. +  --with-local-prefix=DIR specifies directory to put local include.
  22950. +  --with-gxx-include-dir=DIR
  22951. +                          specifies directory to put g++ header files.
  22952. +  --with-cpp-install-dir=DIR
  22953. +                          install the user visible C preprocessor in DIR
  22954. +                          (relative to PREFIX) as well as PREFIX/bin.
  22955. +  --enable-dwarf2      enable DWARF2 debugging as default.
  22956. +  --with-included-gettext use the GNU gettext library included here
  22957. +  --with-catgets          use catgets functions if available
  22958. +
  22959. +Some influential environment variables:
  22960. +  CC          C compiler command
  22961. +  CFLAGS      C compiler flags
  22962. +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  22963. +              nonstandard directory <lib dir>
  22964. +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
  22965. +              headers in a nonstandard directory <include dir>
  22966. +  CPP         C preprocessor
  22967. +
  22968. +Use these variables to override the choices made by `configure' or to help
  22969. +it to find libraries and programs with nonstandard names/locations.
  22970. +
  22971. +_ACEOF
  22972. +fi
  22973. +
  22974. +if test "$ac_init_help" = "recursive"; then
  22975. +  # If there are subdirs, report their specific --help.
  22976. +  ac_popdir=`pwd`
  22977. +  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
  22978. +    test -d $ac_dir || continue
  22979. +    ac_builddir=.
  22980. +
  22981. +if test "$ac_dir" != .; then
  22982. +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  22983. +  # A "../" for each directory in $ac_dir_suffix.
  22984. +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  22985. +else
  22986. +  ac_dir_suffix= ac_top_builddir=
  22987. +fi
  22988. +
  22989. +case $srcdir in
  22990. +  .)  # No --srcdir option.  We are building in place.
  22991. +    ac_srcdir=.
  22992. +    if test -z "$ac_top_builddir"; then
  22993. +       ac_top_srcdir=.
  22994. +    else
  22995. +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  22996. +    fi ;;
  22997. +  [\\/]* | ?:[\\/]* )  # Absolute path.
  22998. +    ac_srcdir=$srcdir$ac_dir_suffix;
  22999. +    ac_top_srcdir=$srcdir ;;
  23000. +  *) # Relative path.
  23001. +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  23002. +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  23003. +esac
  23004. +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
  23005. +# absolute.
  23006. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
  23007. +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
  23008. +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
  23009. +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  23010. +
  23011. +    cd $ac_dir
  23012. +    # Check for guested configure; otherwise get Cygnus style configure.
  23013. +    if test -f $ac_srcdir/configure.gnu; then
  23014. +      echo
  23015. +      $SHELL $ac_srcdir/configure.gnu  --help=recursive
  23016. +    elif test -f $ac_srcdir/configure; then
  23017. +      echo
  23018. +      $SHELL $ac_srcdir/configure  --help=recursive
  23019. +    elif test -f $ac_srcdir/configure.ac ||
  23020. +           test -f $ac_srcdir/configure.in; then
  23021. +      echo
  23022. +      $ac_configure --help
  23023.    else
  23024. -    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  23025. +      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
  23026.    fi
  23027. +    cd $ac_popdir
  23028. +  done
  23029. +fi
  23030. +
  23031. +test -n "$ac_init_help" && exit 0
  23032. +if $ac_init_version; then
  23033. +  cat <<\_ACEOF
  23034. +
  23035. +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
  23036. +Free Software Foundation, Inc.
  23037. +This configure script is free software; the Free Software Foundation
  23038. +gives unlimited permission to copy, distribute and modify it.
  23039. +_ACEOF
  23040. +  exit 0
  23041.  fi
  23042. -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
  23043. +exec 5>config.log
  23044. +cat >&5 <<_ACEOF
  23045. +This file contains any messages produced by compilers while
  23046. +running configure, to aid debugging if configure makes a mistake.
  23047. +
  23048. +It was created by $as_me, which was
  23049. +generated by GNU Autoconf 2.57.  Invocation command line was
  23050.  
  23051. +  $ $0 $@
  23052. +
  23053. +_ACEOF
  23054. +{
  23055. +cat <<_ASUNAME
  23056. +## --------- ##
  23057. +## Platform. ##
  23058. +## --------- ##
  23059. +
  23060. +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
  23061. +uname -m = `(uname -m) 2>/dev/null || echo unknown`
  23062. +uname -r = `(uname -r) 2>/dev/null || echo unknown`
  23063. +uname -s = `(uname -s) 2>/dev/null || echo unknown`
  23064. +uname -v = `(uname -v) 2>/dev/null || echo unknown`
  23065. +
  23066. +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
  23067. +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
  23068. +
  23069. +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
  23070. +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
  23071. +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
  23072. +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
  23073. +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
  23074. +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
  23075. +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
  23076. +
  23077. +_ASUNAME
  23078. +
  23079. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  23080. +for as_dir in $PATH
  23081. +do
  23082. +  IFS=$as_save_IFS
  23083. +  test -z "$as_dir" && as_dir=.
  23084. +  echo "PATH: $as_dir"
  23085. +done
  23086. +
  23087. +} >&5
  23088. +
  23089. +cat >&5 <<_ACEOF
  23090. +
  23091. +
  23092. +## ----------- ##
  23093. +## Core tests. ##
  23094. +## ----------- ##
  23095. +
  23096. +_ACEOF
  23097. +
  23098. +
  23099. +# Keep a trace of the command line.
  23100. +# Strip out --no-create and --no-recursion so they do not pile up.
  23101. +# Strip out --silent because we don't want to record it for future runs.
  23102. +# Also quote any args containing shell meta-characters.
  23103. +# Make two passes to allow for proper duplicate-argument suppression.
  23104. +ac_configure_args=
  23105. +ac_configure_args0=
  23106. +ac_configure_args1=
  23107. +ac_sep=
  23108. +ac_must_keep_next=false
  23109. +for ac_pass in 1 2
  23110. +do
  23111. +  for ac_arg
  23112. +  do
  23113. +    case $ac_arg in
  23114. +    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
  23115. +    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  23116. +    | -silent | --silent | --silen | --sile | --sil)
  23117. +      continue ;;
  23118. +    *" "*|*"    "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  23119. +      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
  23120. +    esac
  23121. +    case $ac_pass in
  23122. +    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
  23123. +    2)
  23124. +      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
  23125. +      if test $ac_must_keep_next = true; then
  23126. +        ac_must_keep_next=false # Got value, back to normal.
  23127. +      else
  23128. +        case $ac_arg in
  23129. +          *=* | --config-cache | -C | -disable-* | --disable-* \
  23130. +          | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
  23131. +          | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
  23132. +          | -with-* | --with-* | -without-* | --without-* | --x)
  23133. +            case "$ac_configure_args0 " in
  23134. +              "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
  23135. +            esac
  23136. +            ;;
  23137. +          -* ) ac_must_keep_next=true ;;
  23138. +        esac
  23139. +      fi
  23140. +      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
  23141. +      # Get rid of the leading space.
  23142. +      ac_sep=" "
  23143. +      ;;
  23144. +    esac
  23145. +  done
  23146. +done
  23147. +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
  23148. +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
  23149. +
  23150. +# When interrupted or exit'd, cleanup temporary files, and complete
  23151. +# config.log.  We remove comments because anyway the quotes in there
  23152. +# would cause problems or look ugly.
  23153. +# WARNING: Be sure not to use single quotes in there, as some shells,
  23154. +# such as our DU 5.0 friend, will then `close' the trap.
  23155. +trap 'exit_status=$?
  23156. +  # Save into config.log some information that might help in debugging.
  23157. +  {
  23158. +    echo
  23159. +
  23160. +    cat <<\_ASBOX
  23161. +## ---------------- ##
  23162. +## Cache variables. ##
  23163. +## ---------------- ##
  23164. +_ASBOX
  23165. +    echo
  23166. +    # The following way of writing the cache mishandles newlines in values,
  23167. +{
  23168. +  (set) 2>&1 |
  23169. +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
  23170. +    *ac_space=\ *)
  23171. +      sed -n \
  23172. +        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
  23173. +          s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
  23174. +      ;;
  23175. +    *)
  23176. +      sed -n \
  23177. +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  23178. +      ;;
  23179. +    esac;
  23180. +}
  23181. +    echo
  23182. +
  23183. +    cat <<\_ASBOX
  23184. +## ----------------- ##
  23185. +## Output variables. ##
  23186. +## ----------------- ##
  23187. +_ASBOX
  23188. +    echo
  23189. +    for ac_var in $ac_subst_vars
  23190. +    do
  23191. +      eval ac_val=$`echo $ac_var`
  23192. +      echo "$ac_var='"'"'$ac_val'"'"'"
  23193. +    done | sort
  23194. +    echo
  23195. +
  23196. +    if test -n "$ac_subst_files"; then
  23197. +      cat <<\_ASBOX
  23198. +## ------------- ##
  23199. +## Output files. ##
  23200. +## ------------- ##
  23201. +_ASBOX
  23202. +      echo
  23203. +      for ac_var in $ac_subst_files
  23204. +      do
  23205. +    eval ac_val=$`echo $ac_var`
  23206. +        echo "$ac_var='"'"'$ac_val'"'"'"
  23207. +      done | sort
  23208. +      echo
  23209. +    fi
  23210. +
  23211. +    if test -s confdefs.h; then
  23212. +      cat <<\_ASBOX
  23213. +## ----------- ##
  23214. +## confdefs.h. ##
  23215. +## ----------- ##
  23216. +_ASBOX
  23217. +      echo
  23218. +      sed "/^$/d" confdefs.h | sort
  23219. +      echo
  23220. +    fi
  23221. +    test "$ac_signal" != 0 &&
  23222. +      echo "$as_me: caught signal $ac_signal"
  23223. +    echo "$as_me: exit $exit_status"
  23224. +  } >&5
  23225. +  rm -f core core.* *.core &&
  23226. +  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
  23227. +    exit $exit_status
  23228. +     ' 0
  23229. +for ac_signal in 1 2 13 15; do
  23230. +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
  23231. +done
  23232. +ac_signal=0
  23233. +
  23234. +# confdefs.h avoids OS command line length limits that DEFS can exceed.
  23235. +rm -rf conftest* confdefs.h
  23236. +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
  23237. +echo >confdefs.h
  23238. +
  23239. +# Predefined preprocessor variables.
  23240. +
  23241. +cat >>confdefs.h <<_ACEOF
  23242. +#define PACKAGE_NAME "$PACKAGE_NAME"
  23243. +_ACEOF
  23244. +
  23245. +
  23246. +cat >>confdefs.h <<_ACEOF
  23247. +#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
  23248. +_ACEOF
  23249. +
  23250. +
  23251. +cat >>confdefs.h <<_ACEOF
  23252. +#define PACKAGE_VERSION "$PACKAGE_VERSION"
  23253. +_ACEOF
  23254. +
  23255. +
  23256. +cat >>confdefs.h <<_ACEOF
  23257. +#define PACKAGE_STRING "$PACKAGE_STRING"
  23258. +_ACEOF
  23259. +
  23260. +
  23261. +cat >>confdefs.h <<_ACEOF
  23262. +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
  23263. +_ACEOF
  23264. +
  23265. +
  23266. +# Let the site file select an alternate cache file if it wants to.
  23267.  # Prefer explicitly selected file to automatically selected ones.
  23268.  if test -z "$CONFIG_SITE"; then
  23269.    if test "x$prefix" != xNONE; then
  23270. @@ -545,43 +1201,108 @@
  23271.  fi
  23272.  for ac_site_file in $CONFIG_SITE; do
  23273.    if test -r "$ac_site_file"; then
  23274. -    echo "loading site script $ac_site_file"
  23275. +    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
  23276. +echo "$as_me: loading site script $ac_site_file" >&6;}
  23277. +    sed 's/^/| /' "$ac_site_file" >&5
  23278.      . "$ac_site_file"
  23279.    fi
  23280.  done
  23281.  
  23282.  if test -r "$cache_file"; then
  23283. -  echo "loading cache $cache_file"
  23284. -  . $cache_file
  23285. +  # Some versions of bash will fail to source /dev/null (special
  23286. +  # files actually), so we avoid doing that.
  23287. +  if test -f "$cache_file"; then
  23288. +    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
  23289. +echo "$as_me: loading cache $cache_file" >&6;}
  23290. +    case $cache_file in
  23291. +      [\\/]* | ?:[\\/]* ) . $cache_file;;
  23292. +      *)                      . ./$cache_file;;
  23293. +    esac
  23294. +  fi
  23295.  else
  23296. -  echo "creating cache $cache_file"
  23297. -  > $cache_file
  23298. +  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
  23299. +echo "$as_me: creating cache $cache_file" >&6;}
  23300. +  >$cache_file
  23301. +fi
  23302. +
  23303. +# Check that the precious variables saved in the cache have kept the same
  23304. +# value.
  23305. +ac_cache_corrupted=false
  23306. +for ac_var in `(set) 2>&1 |
  23307. +               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
  23308. +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  23309. +  eval ac_new_set=\$ac_env_${ac_var}_set
  23310. +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
  23311. +  eval ac_new_val="\$ac_env_${ac_var}_value"
  23312. +  case $ac_old_set,$ac_new_set in
  23313. +    set,)
  23314. +      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
  23315. +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
  23316. +      ac_cache_corrupted=: ;;
  23317. +    ,set)
  23318. +      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
  23319. +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
  23320. +      ac_cache_corrupted=: ;;
  23321. +    ,);;
  23322. +    *)
  23323. +      if test "x$ac_old_val" != "x$ac_new_val"; then
  23324. +        { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
  23325. +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
  23326. +        { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
  23327. +echo "$as_me:   former value:  $ac_old_val" >&2;}
  23328. +        { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
  23329. +echo "$as_me:   current value: $ac_new_val" >&2;}
  23330. +        ac_cache_corrupted=:
  23331. +      fi;;
  23332. +  esac
  23333. +  # Pass precious variables to config.status.
  23334. +  if test "$ac_new_set" = set; then
  23335. +    case $ac_new_val in
  23336. +    *" "*|*"    "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
  23337. +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
  23338. +    *) ac_arg=$ac_var=$ac_new_val ;;
  23339. +    esac
  23340. +    case " $ac_configure_args " in
  23341. +      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
  23342. +      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  23343. +    esac
  23344. +  fi
  23345. +done
  23346. +if $ac_cache_corrupted; then
  23347. +  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
  23348. +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
  23349. +  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
  23350. +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
  23351. +   { (exit 1); exit 1; }; }
  23352.  fi
  23353.  
  23354.  ac_ext=c
  23355. -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  23356.  ac_cpp='$CPP $CPPFLAGS'
  23357. -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  23358. -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  23359. -cross_compiling=$ac_cv_prog_cc_cross
  23360. -
  23361. -ac_exeext=
  23362. -ac_objext=o
  23363. -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  23364. -  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  23365. -  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  23366. -    ac_n= ac_c='
  23367. -' ac_t='    '
  23368. -  else
  23369. -    ac_n=-n ac_c= ac_t=
  23370. -  fi
  23371. -else
  23372. -  ac_n= ac_c='\c' ac_t=
  23373. -fi
  23374. +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  23375. +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  23376. +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  23377.  
  23378.  
  23379.  
  23380.  
  23381. +
  23382. +
  23383. +
  23384. +
  23385. +
  23386. +
  23387. +
  23388. +
  23389. +
  23390. +
  23391. +
  23392. +
  23393. +
  23394. +
  23395. +
  23396. +          ac_config_headers="$ac_config_headers auto-host.h:config.in"
  23397. +
  23398. +
  23399.  remove=rm
  23400.  hard_link=ln
  23401.  symbolic_link='ln -s'
  23402. @@ -595,8 +1316,8 @@
  23403.  # - one of the terminals (":" and ";") is the first or last sign
  23404.  # - two terminals occur directly after each other
  23405.  # - the path contains an element with a dot in it
  23406. -echo $ac_n "checking LIBRARY_PATH variable""... $ac_c" 1>&6
  23407. -echo "configure:600: checking LIBRARY_PATH variable" >&5
  23408. +echo "$as_me:$LINENO: checking LIBRARY_PATH variable" >&5
  23409. +echo $ECHO_N "checking LIBRARY_PATH variable... $ECHO_C" >&6
  23410.  case ${LIBRARY_PATH} in
  23411.    [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
  23412.      library_path_setting="contains current directory"
  23413. @@ -605,12 +1326,18 @@
  23414.      library_path_setting="ok"
  23415.      ;;
  23416.  esac
  23417. -echo "$ac_t""$library_path_setting" 1>&6
  23418. +echo "$as_me:$LINENO: result: $library_path_setting" >&5
  23419. +echo "${ECHO_T}$library_path_setting" >&6
  23420.  if test "$library_path_setting" != "ok"; then
  23421. -{ echo "configure: error: 
  23422. +{ { echo "$as_me:$LINENO: error:
  23423. +*** LIBRARY_PATH shouldn't contain the current directory when
  23424. +*** building gcc. Please change the environment variable
  23425. +*** and run configure again." >&5
  23426. +echo "$as_me: error:
  23427.  *** LIBRARY_PATH shouldn't contain the current directory when
  23428.  *** building gcc. Please change the environment variable
  23429. -*** and run configure again." 1>&2; exit 1; }
  23430. +*** and run configure again." >&2;}
  23431. +   { (exit 1); exit 1; }; }
  23432.  fi
  23433.  
  23434.  # Test if GCC_EXEC_PREFIX contains the notation for the current directory
  23435. @@ -620,8 +1347,8 @@
  23436.  # - one of the terminals (":" and ";") is the first or last sign
  23437.  # - two terminals occur directly after each other
  23438.  # - the path contains an element with a dot in it
  23439. -echo $ac_n "checking GCC_EXEC_PREFIX variable""... $ac_c" 1>&6
  23440. -echo "configure:625: checking GCC_EXEC_PREFIX variable" >&5
  23441. +echo "$as_me:$LINENO: checking GCC_EXEC_PREFIX variable" >&5
  23442. +echo $ECHO_N "checking GCC_EXEC_PREFIX variable... $ECHO_C" >&6
  23443.  case ${GCC_EXEC_PREFIX} in
  23444.    [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
  23445.      gcc_exec_prefix_setting="contains current directory"
  23446. @@ -630,12 +1357,18 @@
  23447.      gcc_exec_prefix_setting="ok"
  23448.      ;;
  23449.  esac
  23450. -echo "$ac_t""$gcc_exec_prefix_setting" 1>&6
  23451. +echo "$as_me:$LINENO: result: $gcc_exec_prefix_setting" >&5
  23452. +echo "${ECHO_T}$gcc_exec_prefix_setting" >&6
  23453.  if test "$gcc_exec_prefix_setting" != "ok"; then
  23454. -{ echo "configure: error: 
  23455. +{ { echo "$as_me:$LINENO: error:
  23456. +*** GCC_EXEC_PREFIX shouldn't contain the current directory when
  23457. +*** building gcc. Please change the environment variable
  23458. +*** and run configure again." >&5
  23459. +echo "$as_me: error:
  23460.  *** GCC_EXEC_PREFIX shouldn't contain the current directory when
  23461.  *** building gcc. Please change the environment variable
  23462. -*** and run configure again." 1>&2; exit 1; }
  23463. +*** and run configure again." >&2;}
  23464. +   { (exit 1); exit 1; }; }
  23465.  fi
  23466.  
  23467.  # Check for additional parameters
  23468. @@ -647,10 +1380,10 @@
  23469.    gnu_ld_flag="$with_gnu_ld"
  23470.  else
  23471.    gnu_ld_flag=no
  23472. -fi
  23473. -
  23474. +fi;
  23475.  
  23476.  # With pre-defined ld
  23477. +
  23478.  # Check whether --with-ld or --without-ld was given.
  23479.  if test "${with_ld+set}" = set; then
  23480.    withval="$with_ld"
  23481. @@ -655,17 +1388,17 @@
  23482.  if test "${with_ld+set}" = set; then
  23483.    withval="$with_ld"
  23484.    DEFAULT_LINKER="$with_ld"
  23485. -fi
  23486. -
  23487. +fi;
  23488.  if test x"${DEFAULT_LINKER+set}" = x"set"; then
  23489.    if test ! -x "$DEFAULT_LINKER"; then
  23490. -    echo "configure: warning: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" 1>&2
  23491. +    { echo "$as_me:$LINENO: WARNING: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" >&5
  23492. +echo "$as_me: WARNING: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" >&2;}
  23493.    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
  23494.      gnu_ld_flag=yes
  23495.    fi
  23496. -  cat >> confdefs.h <<EOF
  23497. +  cat >>confdefs.h <<_ACEOF
  23498.  #define DEFAULT_LINKER "$DEFAULT_LINKER"
  23499. -EOF
  23500. +_ACEOF
  23501.  
  23502.  fi
  23503.  
  23504. @@ -676,24 +1409,24 @@
  23505.    gas_flag="$with_gnu_as"
  23506.  else
  23507.    gas_flag=no
  23508. -fi
  23509. +fi;
  23510.  
  23511.  
  23512.  # Check whether --with-as or --without-as was given.
  23513.  if test "${with_as+set}" = set; then
  23514.    withval="$with_as"
  23515.    DEFAULT_ASSEMBLER="$with_as"
  23516. -fi
  23517. -
  23518. +fi;
  23519.  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
  23520.    if test ! -x "$DEFAULT_ASSEMBLER"; then
  23521. -    echo "configure: warning: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" 1>&2
  23522. +    { echo "$as_me:$LINENO: WARNING: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" >&5
  23523. +echo "$as_me: WARNING: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" >&2;}
  23524.    elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
  23525.      gas_flag=yes
  23526.    fi
  23527. -  cat >> confdefs.h <<EOF
  23528. +  cat >>confdefs.h <<_ACEOF
  23529.  #define DEFAULT_ASSEMBLER "$DEFAULT_ASSEMBLER"
  23530. -EOF
  23531. +_ACEOF
  23532.  
  23533.  fi
  23534.  
  23535. @@ -704,10 +1437,10 @@
  23536.    stabs="$with_stabs"
  23537.  else
  23538.    stabs=no
  23539. -fi
  23540. -
  23541. +fi;
  23542.  
  23543.  # With ELF
  23544. +
  23545.  # Check whether --with-elf or --without-elf was given.
  23546.  if test "${with_elf+set}" = set; then
  23547.    withval="$with_elf"
  23548. @@ -714,8 +1447,7 @@
  23549.    elf="$with_elf"
  23550.  else
  23551.    elf=no
  23552. -fi
  23553. -
  23554. +fi;
  23555.  
  23556.  # Specify the local prefix
  23557.  local_prefix=
  23558. @@ -723,12 +1455,13 @@
  23559.  if test "${with_local_prefix+set}" = set; then
  23560.    withval="$with_local_prefix"
  23561.    case "${withval}" in
  23562. -yes)    { echo "configure: error: bad value ${withval} given for local include directory prefix" 1>&2; exit 1; } ;;
  23563. +yes)    { { echo "$as_me:$LINENO: error: bad value ${withval} given for local include directory prefix" >&5
  23564. +echo "$as_me: error: bad value ${withval} given for local include directory prefix" >&2;}
  23565. +   { (exit 1); exit 1; }; } ;;
  23566.  no)    ;;
  23567.  *)    local_prefix=$with_local_prefix ;;
  23568.  esac
  23569. -fi
  23570. -
  23571. +fi;
  23572.  
  23573.  # Default local prefix if it is empty
  23574.  if test x$local_prefix = x; then
  23575. @@ -744,12 +1477,13 @@
  23576.  if test "${with_gxx_include_dir+set}" = set; then
  23577.    withval="$with_gxx_include_dir"
  23578.    case "${withval}" in
  23579. -yes)    { echo "configure: error: bad value ${withval} given for g++ include directory" 1>&2; exit 1; } ;;
  23580. +yes)    { { echo "$as_me:$LINENO: error: bad value ${withval} given for g++ include directory" >&5
  23581. +echo "$as_me: error: bad value ${withval} given for g++ include directory" >&2;}
  23582. +   { (exit 1); exit 1; }; } ;;
  23583.  no)    ;;
  23584.  *)    gcc_gxx_include_dir=$with_gxx_include_dir ;;
  23585.  esac
  23586. -fi
  23587. -
  23588. +fi;
  23589.  
  23590.  if test x${gcc_gxx_include_dir} = x; then
  23591.    if test x${enable_version_specific_runtime_libs} = xyes; then
  23592. @@ -765,35 +1499,37 @@
  23593.  if test "${enable_checking+set}" = set; then
  23594.    enableval="$enable_checking"
  23595.    case "${enableval}" in
  23596. -yes)    cat >> confdefs.h <<\EOF
  23597. +yes)    cat >>confdefs.h <<\_ACEOF
  23598.  #define ENABLE_CHECKING 1
  23599. -EOF
  23600. +_ACEOF
  23601.   ;;
  23602.  no)    ;;
  23603. -*)    { echo "configure: error: bad value ${enableval} given for checking option" 1>&2; exit 1; } ;;
  23604. +*)    { { echo "$as_me:$LINENO: error: bad value ${enableval} given for checking option" >&5
  23605. +echo "$as_me: error: bad value ${enableval} given for checking option" >&2;}
  23606. +   { (exit 1); exit 1; }; } ;;
  23607.  esac
  23608. -fi
  23609. -
  23610. +fi;
  23611.  
  23612.  # Check whether --enable-cpp or --disable-cpp was given.
  23613.  if test "${enable_cpp+set}" = set; then
  23614.    enableval="$enable_cpp"
  23615. -  :
  23616. +
  23617.  else
  23618.    enable_cpp=yes
  23619. -fi
  23620. +fi;
  23621.  
  23622.  
  23623.  # Check whether --with-cpp_install_dir or --without-cpp_install_dir was given.
  23624.  if test "${with_cpp_install_dir+set}" = set; then
  23625.    withval="$with_cpp_install_dir"
  23626.    if test x$withval = xyes; then
  23627. -  { echo "configure: error: option --with-cpp-install-dir requires an argument" 1>&2; exit 1; }
  23628. +  { { echo "$as_me:$LINENO: error: option --with-cpp-install-dir requires an argument" >&5
  23629. +echo "$as_me: error: option --with-cpp-install-dir requires an argument" >&2;}
  23630. +   { (exit 1); exit 1; }; }
  23631.  elif test x$withval != xno; then
  23632.    cpp_install_dir=$withval
  23633.  fi
  23634. -fi
  23635. -
  23636. +fi;
  23637.  
  23638.  # Use cpplib+cppmain for the preprocessor, but don't link it with the compiler.
  23639.  cpp_main=cccp
  23640. @@ -803,8 +1539,7 @@
  23641.    if test x$enable_cpplib != xno; then
  23642.    cpp_main=cppmain
  23643.  fi
  23644. -fi
  23645. -
  23646. +fi;
  23647.  
  23648.  # Link cpplib into the compiler proper, for C/C++/ObjC.
  23649.  # Check whether --enable-c-cpplib or --disable-c-cpplib was given.
  23650. @@ -816,8 +1551,7 @@
  23651.    extra_c_flags="${extra_c_flags} -DUSE_CPPLIB=1"
  23652.    cpp_main=cppmain
  23653.  fi
  23654. -fi
  23655. -
  23656. +fi;
  23657.  
  23658.  # Enable Multibyte Characters for C/C++
  23659.  # Check whether --enable-c-mbchar or --disable-c-mbchar was given.
  23660. @@ -826,8 +1560,7 @@
  23661.    if test x$enable_c_mbchar != xno; then
  23662.    extra_c_flags=-DMULTIBYTE_CHARS=1
  23663.  fi
  23664. -fi
  23665. -
  23666. +fi;
  23667.  
  23668.  # Disable fast fixincludes
  23669.  # Check whether --enable-fast-fixincludes or --disable-fast-fixincludes was given.
  23670. @@ -836,16 +1569,14 @@
  23671.    if test x$enable_fast_fixincludes = xno ; then
  23672.    cp $srcdir/fixincludes ./fixinc.sh
  23673.  fi
  23674. -fi
  23675. -
  23676. +fi;
  23677.  
  23678.  # Enable Haifa scheduler.
  23679.  # Check whether --enable-haifa or --disable-haifa was given.
  23680.  if test "${enable_haifa+set}" = set; then
  23681.    enableval="$enable_haifa"
  23682. -  :
  23683. -fi
  23684.  
  23685. +fi;
  23686.  
  23687.  # Enable threads
  23688.  # Pass with no value to take the default
  23689. @@ -858,8 +1589,7 @@
  23690.  fi
  23691.  else
  23692.    enable_threads=''
  23693. -fi
  23694. -
  23695. +fi;
  23696.  
  23697.  enable_threads_flag=$enable_threads
  23698.  # Check if a valid thread package
  23699. @@ -892,8 +1622,7 @@
  23700.  fi
  23701.  else
  23702.    objc_boehm_gc=''
  23703. -fi
  23704. -
  23705. +fi;
  23706.  
  23707.  # Check whether --enable-java-gc or --disable-java-gc was given.
  23708.  if test "${enable_java_gc+set}" = set; then
  23709. @@ -902,7 +1631,7 @@
  23710.    JAVAGC=$enableval
  23711.  else
  23712.    JAVAGC=boehm
  23713. -fi
  23714. +fi;
  23715.  
  23716.  
  23717.  # Check whether --with-dwarf2 or --without-dwarf2 was given.
  23718. @@ -911,8 +1640,7 @@
  23719.    dwarf2="$with_dwarf2"
  23720.  else
  23721.    dwarf2=no
  23722. -fi
  23723. -
  23724. +fi;
  23725.  
  23726.  # Determine the host, build, and target systems
  23727.  ac_aux_dir=
  23728. @@ -925,314 +1653,742 @@
  23729.      ac_aux_dir=$ac_dir
  23730.      ac_install_sh="$ac_aux_dir/install.sh -c"
  23731.      break
  23732. +  elif test -f $ac_dir/shtool; then
  23733. +    ac_aux_dir=$ac_dir
  23734. +    ac_install_sh="$ac_aux_dir/shtool install -c"
  23735. +    break
  23736.    fi
  23737.  done
  23738.  if test -z "$ac_aux_dir"; then
  23739. -  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
  23740. -fi
  23741. -ac_config_guess=$ac_aux_dir/config.guess
  23742. -ac_config_sub=$ac_aux_dir/config.sub
  23743. -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
  23744. +  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
  23745. +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
  23746. +   { (exit 1); exit 1; }; }
  23747. +fi
  23748. +ac_config_guess="$SHELL $ac_aux_dir/config.guess"
  23749. +ac_config_sub="$SHELL $ac_aux_dir/config.sub"
  23750. +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
  23751.  
  23752. +# Make sure we can run config.sub.
  23753. +$ac_config_sub sun4 >/dev/null 2>&1 ||
  23754. +  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
  23755. +echo "$as_me: error: cannot run $ac_config_sub" >&2;}
  23756. +   { (exit 1); exit 1; }; }
  23757. +
  23758. +echo "$as_me:$LINENO: checking build system type" >&5
  23759. +echo $ECHO_N "checking build system type... $ECHO_C" >&6
  23760. +if test "${ac_cv_build+set}" = set; then
  23761. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  23762. +else
  23763. +  ac_cv_build_alias=$build_alias
  23764. +test -z "$ac_cv_build_alias" &&
  23765. +  ac_cv_build_alias=`$ac_config_guess`
  23766. +test -z "$ac_cv_build_alias" &&
  23767. +  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
  23768. +echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
  23769. +   { (exit 1); exit 1; }; }
  23770. +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
  23771. +  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
  23772. +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
  23773. +   { (exit 1); exit 1; }; }
  23774. +
  23775. +fi
  23776. +echo "$as_me:$LINENO: result: $ac_cv_build" >&5
  23777. +echo "${ECHO_T}$ac_cv_build" >&6
  23778. +build=$ac_cv_build
  23779. +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  23780. +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  23781. +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  23782. +
  23783. +
  23784. +echo "$as_me:$LINENO: checking host system type" >&5
  23785. +echo $ECHO_N "checking host system type... $ECHO_C" >&6
  23786. +if test "${ac_cv_host+set}" = set; then
  23787. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  23788. +else
  23789. +  ac_cv_host_alias=$host_alias
  23790. +test -z "$ac_cv_host_alias" &&
  23791. +  ac_cv_host_alias=$ac_cv_build_alias
  23792. +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
  23793. +  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
  23794. +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
  23795. +   { (exit 1); exit 1; }; }
  23796. +
  23797. +fi
  23798. +echo "$as_me:$LINENO: result: $ac_cv_host" >&5
  23799. +echo "${ECHO_T}$ac_cv_host" >&6
  23800. +host=$ac_cv_host
  23801. +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  23802. +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  23803. +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  23804. +
  23805. +
  23806. +echo "$as_me:$LINENO: checking target system type" >&5
  23807. +echo $ECHO_N "checking target system type... $ECHO_C" >&6
  23808. +if test "${ac_cv_target+set}" = set; then
  23809. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  23810. +else
  23811. +  ac_cv_target_alias=$target_alias
  23812. +test "x$ac_cv_target_alias" = "x" &&
  23813. +  ac_cv_target_alias=$ac_cv_host_alias
  23814. +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
  23815. +  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
  23816. +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
  23817. +   { (exit 1); exit 1; }; }
  23818. +
  23819. +fi
  23820. +echo "$as_me:$LINENO: result: $ac_cv_target" >&5
  23821. +echo "${ECHO_T}$ac_cv_target" >&6
  23822. +target=$ac_cv_target
  23823. +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  23824. +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  23825. +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  23826.  
  23827. -# Do some error checking and defaulting for the host and target type.
  23828. -# The inputs are:
  23829. -#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
  23830. -#
  23831. -# The rules are:
  23832. -# 1. You are not allowed to specify --host, --target, and nonopt at the
  23833. -#    same time.
  23834. -# 2. Host defaults to nonopt.
  23835. -# 3. If nonopt is not specified, then host defaults to the current host,
  23836. -#    as determined by config.guess.
  23837. -# 4. Target and build default to nonopt.
  23838. -# 5. If nonopt is not specified, then target and build default to host.
  23839.  
  23840.  # The aliases save the names the user supplied, while $host etc.
  23841.  # will get canonicalized.
  23842. -case $host---$target---$nonopt in
  23843. -NONE---*---* | *---NONE---* | *---*---NONE) ;;
  23844. -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
  23845. -esac
  23846. +test -n "$target_alias" &&
  23847. +  test "$program_prefix$program_suffix$program_transform_name" = \
  23848. +    NONENONEs,x,x, &&
  23849. +  program_prefix=${target_alias}-
  23850.  
  23851. +# Find the native compiler
  23852. +ac_ext=c
  23853. +ac_cpp='$CPP $CPPFLAGS'
  23854. +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  23855. +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  23856. +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  23857. +if test -n "$ac_tool_prefix"; then
  23858. +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
  23859. +set dummy ${ac_tool_prefix}gcc; ac_word=$2
  23860. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  23861. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  23862. +if test "${ac_cv_prog_CC+set}" = set; then
  23863. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  23864. +else
  23865. +  if test -n "$CC"; then
  23866. +  ac_cv_prog_CC="$CC" # Let the user override the test.
  23867. +else
  23868. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  23869. +for as_dir in $PATH
  23870. +do
  23871. +  IFS=$as_save_IFS
  23872. +  test -z "$as_dir" && as_dir=.
  23873. +  for ac_exec_ext in '' $ac_executable_extensions; do
  23874. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  23875. +    ac_cv_prog_CC="${ac_tool_prefix}gcc"
  23876. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  23877. +    break 2
  23878. +  fi
  23879. +done
  23880. +done
  23881.  
  23882. -# Make sure we can run config.sub.
  23883. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
  23884. -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
  23885. +fi
  23886. +fi
  23887. +CC=$ac_cv_prog_CC
  23888. +if test -n "$CC"; then
  23889. +  echo "$as_me:$LINENO: result: $CC" >&5
  23890. +echo "${ECHO_T}$CC" >&6
  23891. +else
  23892. +  echo "$as_me:$LINENO: result: no" >&5
  23893. +echo "${ECHO_T}no" >&6
  23894.  fi
  23895.  
  23896. -echo $ac_n "checking host system type""... $ac_c" 1>&6
  23897. -echo "configure:966: checking host system type" >&5
  23898. -
  23899. -host_alias=$host
  23900. -case "$host_alias" in
  23901. -NONE)
  23902. -  case $nonopt in
  23903. -  NONE)
  23904. -    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
  23905. -    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
  23906. -    fi ;;
  23907. -  *) host_alias=$nonopt ;;
  23908. -  esac ;;
  23909. -esac
  23910. -
  23911. -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
  23912. -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  23913. -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  23914. -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  23915. -echo "$ac_t""$host" 1>&6
  23916. -
  23917. -echo $ac_n "checking target system type""... $ac_c" 1>&6
  23918. -echo "configure:987: checking target system type" >&5
  23919. -
  23920. -target_alias=$target
  23921. -case "$target_alias" in
  23922. -NONE)
  23923. -  case $nonopt in
  23924. -  NONE) target_alias=$host_alias ;;
  23925. -  *) target_alias=$nonopt ;;
  23926. -  esac ;;
  23927. -esac
  23928. -
  23929. -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
  23930. -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  23931. -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  23932. -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  23933. -echo "$ac_t""$target" 1>&6
  23934. -
  23935. -echo $ac_n "checking build system type""... $ac_c" 1>&6
  23936. -echo "configure:1005: checking build system type" >&5
  23937. -
  23938. -build_alias=$build
  23939. -case "$build_alias" in
  23940. -NONE)
  23941. -  case $nonopt in
  23942. -  NONE) build_alias=$host_alias ;;
  23943. -  *) build_alias=$nonopt ;;
  23944. -  esac ;;
  23945. -esac
  23946. -
  23947. -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
  23948. -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
  23949. -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
  23950. -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
  23951. -echo "$ac_t""$build" 1>&6
  23952. +fi
  23953. +if test -z "$ac_cv_prog_CC"; then
  23954. +  ac_ct_CC=$CC
  23955. +  # Extract the first word of "gcc", so it can be a program name with args.
  23956. +set dummy gcc; ac_word=$2
  23957. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  23958. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  23959. +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  23960. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  23961. +else
  23962. +  if test -n "$ac_ct_CC"; then
  23963. +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  23964. +else
  23965. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  23966. +for as_dir in $PATH
  23967. +do
  23968. +  IFS=$as_save_IFS
  23969. +  test -z "$as_dir" && as_dir=.
  23970. +  for ac_exec_ext in '' $ac_executable_extensions; do
  23971. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  23972. +    ac_cv_prog_ac_ct_CC="gcc"
  23973. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  23974. +    break 2
  23975. +  fi
  23976. +done
  23977. +done
  23978.  
  23979. -test "$host_alias" != "$target_alias" &&
  23980. -  test "$program_prefix$program_suffix$program_transform_name" = \
  23981. -    NONENONEs,x,x, &&
  23982. -  program_prefix=${target_alias}-
  23983. +fi
  23984. +fi
  23985. +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  23986. +if test -n "$ac_ct_CC"; then
  23987. +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  23988. +echo "${ECHO_T}$ac_ct_CC" >&6
  23989. +else
  23990. +  echo "$as_me:$LINENO: result: no" >&5
  23991. +echo "${ECHO_T}no" >&6
  23992. +fi
  23993.  
  23994. +  CC=$ac_ct_CC
  23995. +else
  23996. +  CC="$ac_cv_prog_CC"
  23997. +fi
  23998.  
  23999. -# Find the native compiler
  24000. -# Extract the first word of "gcc", so it can be a program name with args.
  24001. -set dummy gcc; ac_word=$2
  24002. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  24003. -echo "configure:1032: checking for $ac_word" >&5
  24004. -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  24005. -  echo $ac_n "(cached) $ac_c" 1>&6
  24006. +if test -z "$CC"; then
  24007. +  if test -n "$ac_tool_prefix"; then
  24008. +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
  24009. +set dummy ${ac_tool_prefix}cc; ac_word=$2
  24010. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  24011. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  24012. +if test "${ac_cv_prog_CC+set}" = set; then
  24013. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24014.  else
  24015.    if test -n "$CC"; then
  24016.    ac_cv_prog_CC="$CC" # Let the user override the test.
  24017.  else
  24018. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  24019. -  ac_dummy="$PATH"
  24020. -  for ac_dir in $ac_dummy; do
  24021. -    test -z "$ac_dir" && ac_dir=.
  24022. -    if test -f $ac_dir/$ac_word; then
  24023. -      ac_cv_prog_CC="gcc"
  24024. -      break
  24025. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  24026. +for as_dir in $PATH
  24027. +do
  24028. +  IFS=$as_save_IFS
  24029. +  test -z "$as_dir" && as_dir=.
  24030. +  for ac_exec_ext in '' $ac_executable_extensions; do
  24031. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  24032. +    ac_cv_prog_CC="${ac_tool_prefix}cc"
  24033. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  24034. +    break 2
  24035.      fi
  24036. -  done
  24037. -  IFS="$ac_save_ifs"
  24038. +done
  24039. +done
  24040. +
  24041.  fi
  24042.  fi
  24043. -CC="$ac_cv_prog_CC"
  24044. +CC=$ac_cv_prog_CC
  24045.  if test -n "$CC"; then
  24046. -  echo "$ac_t""$CC" 1>&6
  24047. +  echo "$as_me:$LINENO: result: $CC" >&5
  24048. +echo "${ECHO_T}$CC" >&6
  24049. +else
  24050. +  echo "$as_me:$LINENO: result: no" >&5
  24051. +echo "${ECHO_T}no" >&6
  24052. +fi
  24053. +
  24054. +fi
  24055. +if test -z "$ac_cv_prog_CC"; then
  24056. +  ac_ct_CC=$CC
  24057. +  # Extract the first word of "cc", so it can be a program name with args.
  24058. +set dummy cc; ac_word=$2
  24059. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  24060. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  24061. +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  24062. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24063. +else
  24064. +  if test -n "$ac_ct_CC"; then
  24065. +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  24066. +else
  24067. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  24068. +for as_dir in $PATH
  24069. +do
  24070. +  IFS=$as_save_IFS
  24071. +  test -z "$as_dir" && as_dir=.
  24072. +  for ac_exec_ext in '' $ac_executable_extensions; do
  24073. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  24074. +    ac_cv_prog_ac_ct_CC="cc"
  24075. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  24076. +    break 2
  24077. +  fi
  24078. +done
  24079. +done
  24080. +
  24081. +fi
  24082. +fi
  24083. +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  24084. +if test -n "$ac_ct_CC"; then
  24085. +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  24086. +echo "${ECHO_T}$ac_ct_CC" >&6
  24087. +else
  24088. +  echo "$as_me:$LINENO: result: no" >&5
  24089. +echo "${ECHO_T}no" >&6
  24090. +fi
  24091. +
  24092. +  CC=$ac_ct_CC
  24093.  else
  24094. -  echo "$ac_t""no" 1>&6
  24095. +  CC="$ac_cv_prog_CC"
  24096.  fi
  24097.  
  24098. +fi
  24099.  if test -z "$CC"; then
  24100.    # Extract the first word of "cc", so it can be a program name with args.
  24101.  set dummy cc; ac_word=$2
  24102. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  24103. -echo "configure:1062: checking for $ac_word" >&5
  24104. -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  24105. -  echo $ac_n "(cached) $ac_c" 1>&6
  24106. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  24107. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  24108. +if test "${ac_cv_prog_CC+set}" = set; then
  24109. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24110.  else
  24111.    if test -n "$CC"; then
  24112.    ac_cv_prog_CC="$CC" # Let the user override the test.
  24113.  else
  24114. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  24115.    ac_prog_rejected=no
  24116. -  ac_dummy="$PATH"
  24117. -  for ac_dir in $ac_dummy; do
  24118. -    test -z "$ac_dir" && ac_dir=.
  24119. -    if test -f $ac_dir/$ac_word; then
  24120. -      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
  24121. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  24122. +for as_dir in $PATH
  24123. +do
  24124. +  IFS=$as_save_IFS
  24125. +  test -z "$as_dir" && as_dir=.
  24126. +  for ac_exec_ext in '' $ac_executable_extensions; do
  24127. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  24128. +    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
  24129.          ac_prog_rejected=yes
  24130.      continue
  24131.        fi
  24132.        ac_cv_prog_CC="cc"
  24133. -      break
  24134. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  24135. +    break 2
  24136.      fi
  24137. -  done
  24138. -  IFS="$ac_save_ifs"
  24139. +done
  24140. +done
  24141. +
  24142.  if test $ac_prog_rejected = yes; then
  24143.    # We found a bogon in the path, so make sure we never use it.
  24144.    set dummy $ac_cv_prog_CC
  24145.    shift
  24146. -  if test $# -gt 0; then
  24147. +  if test $# != 0; then
  24148.      # We chose a different compiler from the bogus one.
  24149.      # However, it has the same basename, so the bogon will be chosen
  24150.      # first if we set CC to just the basename; use the full file name.
  24151.      shift
  24152. -    set dummy "$ac_dir/$ac_word" "$@"
  24153. -    shift
  24154. -    ac_cv_prog_CC="$@"
  24155. +    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
  24156.    fi
  24157.  fi
  24158.  fi
  24159.  fi
  24160. -CC="$ac_cv_prog_CC"
  24161. +CC=$ac_cv_prog_CC
  24162.  if test -n "$CC"; then
  24163. -  echo "$ac_t""$CC" 1>&6
  24164. +  echo "$as_me:$LINENO: result: $CC" >&5
  24165. +echo "${ECHO_T}$CC" >&6
  24166.  else
  24167. -  echo "$ac_t""no" 1>&6
  24168. +  echo "$as_me:$LINENO: result: no" >&5
  24169. +echo "${ECHO_T}no" >&6
  24170.  fi
  24171.  
  24172. -  if test -z "$CC"; then
  24173. -    case "`uname -s`" in
  24174. -    *win32* | *WIN32*)
  24175. -      # Extract the first word of "cl", so it can be a program name with args.
  24176. -set dummy cl; ac_word=$2
  24177. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  24178. -echo "configure:1113: checking for $ac_word" >&5
  24179. -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  24180. -  echo $ac_n "(cached) $ac_c" 1>&6
  24181. +fi
  24182. +if test -z "$CC"; then
  24183. +  if test -n "$ac_tool_prefix"; then
  24184. +  for ac_prog in cl
  24185. +  do
  24186. +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
  24187. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
  24188. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  24189. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  24190. +if test "${ac_cv_prog_CC+set}" = set; then
  24191. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24192.  else
  24193.    if test -n "$CC"; then
  24194.    ac_cv_prog_CC="$CC" # Let the user override the test.
  24195.  else
  24196. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  24197. -  ac_dummy="$PATH"
  24198. -  for ac_dir in $ac_dummy; do
  24199. -    test -z "$ac_dir" && ac_dir=.
  24200. -    if test -f $ac_dir/$ac_word; then
  24201. -      ac_cv_prog_CC="cl"
  24202. -      break
  24203. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  24204. +for as_dir in $PATH
  24205. +do
  24206. +  IFS=$as_save_IFS
  24207. +  test -z "$as_dir" && as_dir=.
  24208. +  for ac_exec_ext in '' $ac_executable_extensions; do
  24209. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  24210. +    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
  24211. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  24212. +    break 2
  24213.      fi
  24214. -  done
  24215. -  IFS="$ac_save_ifs"
  24216. +done
  24217. +done
  24218. +
  24219.  fi
  24220.  fi
  24221. -CC="$ac_cv_prog_CC"
  24222. +CC=$ac_cv_prog_CC
  24223.  if test -n "$CC"; then
  24224. -  echo "$ac_t""$CC" 1>&6
  24225. +  echo "$as_me:$LINENO: result: $CC" >&5
  24226. +echo "${ECHO_T}$CC" >&6
  24227.  else
  24228. -  echo "$ac_t""no" 1>&6
  24229. +  echo "$as_me:$LINENO: result: no" >&5
  24230. +echo "${ECHO_T}no" >&6
  24231.  fi
  24232. - ;;
  24233. -    esac
  24234. +
  24235. +    test -n "$CC" && break
  24236. +  done
  24237. +fi
  24238. +if test -z "$CC"; then
  24239. +  ac_ct_CC=$CC
  24240. +  for ac_prog in cl
  24241. +do
  24242. +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  24243. +set dummy $ac_prog; ac_word=$2
  24244. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  24245. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  24246. +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
  24247. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24248. +else
  24249. +  if test -n "$ac_ct_CC"; then
  24250. +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
  24251. +else
  24252. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  24253. +for as_dir in $PATH
  24254. +do
  24255. +  IFS=$as_save_IFS
  24256. +  test -z "$as_dir" && as_dir=.
  24257. +  for ac_exec_ext in '' $ac_executable_extensions; do
  24258. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  24259. +    ac_cv_prog_ac_ct_CC="$ac_prog"
  24260. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  24261. +    break 2
  24262.    fi
  24263. -  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
  24264. +done
  24265. +done
  24266. +
  24267.  fi
  24268. +fi
  24269. +ac_ct_CC=$ac_cv_prog_ac_ct_CC
  24270. +if test -n "$ac_ct_CC"; then
  24271. +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
  24272. +echo "${ECHO_T}$ac_ct_CC" >&6
  24273. +else
  24274. +  echo "$as_me:$LINENO: result: no" >&5
  24275. +echo "${ECHO_T}no" >&6
  24276. +fi
  24277. +
  24278. +  test -n "$ac_ct_CC" && break
  24279. +done
  24280.  
  24281. -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
  24282. -echo "configure:1145: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  24283. +  CC=$ac_ct_CC
  24284. +fi
  24285.  
  24286. -ac_ext=c
  24287. -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  24288. -ac_cpp='$CPP $CPPFLAGS'
  24289. -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  24290. -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  24291. -cross_compiling=$ac_cv_prog_cc_cross
  24292. +fi
  24293.  
  24294. -cat > conftest.$ac_ext << EOF
  24295.  
  24296. -#line 1156 "configure"
  24297. -#include "confdefs.h"
  24298. +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
  24299. +See \`config.log' for more details." >&5
  24300. +echo "$as_me: error: no acceptable C compiler found in \$PATH
  24301. +See \`config.log' for more details." >&2;}
  24302. +   { (exit 1); exit 1; }; }
  24303. +
  24304. +# Provide some information about the compiler.
  24305. +echo "$as_me:$LINENO:" \
  24306. +     "checking for C compiler version" >&5
  24307. +ac_compiler=`set X $ac_compile; echo $2`
  24308. +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
  24309. +  (eval $ac_compiler --version </dev/null >&5) 2>&5
  24310. +  ac_status=$?
  24311. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24312. +  (exit $ac_status); }
  24313. +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
  24314. +  (eval $ac_compiler -v </dev/null >&5) 2>&5
  24315. +  ac_status=$?
  24316. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24317. +  (exit $ac_status); }
  24318. +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
  24319. +  (eval $ac_compiler -V </dev/null >&5) 2>&5
  24320. +  ac_status=$?
  24321. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24322. +  (exit $ac_status); }
  24323. +
  24324. +cat >conftest.$ac_ext <<_ACEOF
  24325. +#line $LINENO "configure"
  24326. +/* confdefs.h.  */
  24327. +_ACEOF
  24328. +cat confdefs.h >>conftest.$ac_ext
  24329. +cat >>conftest.$ac_ext <<_ACEOF
  24330. +/* end confdefs.h.  */
  24331.  
  24332. -main(){return(0);}
  24333. -EOF
  24334. -if { (eval echo configure:1161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  24335. -  ac_cv_prog_cc_works=yes
  24336. -  # If we can't run a trivial program, we are probably using a cross compiler.
  24337. -  if (./conftest; exit) 2>/dev/null; then
  24338. -    ac_cv_prog_cc_cross=no
  24339. -  else
  24340. -    ac_cv_prog_cc_cross=yes
  24341. -  fi
  24342. -else
  24343. -  echo "configure: failed program was:" >&5
  24344. -  cat conftest.$ac_ext >&5
  24345. -  ac_cv_prog_cc_works=no
  24346. -fi
  24347. -rm -fr conftest*
  24348. -ac_ext=c
  24349. -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
  24350. -ac_cpp='$CPP $CPPFLAGS'
  24351. -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
  24352. -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
  24353. -cross_compiling=$ac_cv_prog_cc_cross
  24354. -
  24355. -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
  24356. -if test $ac_cv_prog_cc_works = no; then
  24357. -  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  24358. -fi
  24359. -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
  24360. -echo "configure:1187: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  24361. -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  24362. -cross_compiling=$ac_cv_prog_cc_cross
  24363. -
  24364. -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
  24365. -echo "configure:1192: checking whether we are using GNU C" >&5
  24366. -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  24367. -  echo $ac_n "(cached) $ac_c" 1>&6
  24368. +int
  24369. +main ()
  24370. +{
  24371. +
  24372. +  ;
  24373. +  return 0;
  24374. +}
  24375. +_ACEOF
  24376. +ac_clean_files_save=$ac_clean_files
  24377. +ac_clean_files="$ac_clean_files a.out a.exe b.out"
  24378. +# Try to create an executable without -o first, disregard a.out.
  24379. +# It will help us diagnose broken compilers, and finding out an intuition
  24380. +# of exeext.
  24381. +echo "$as_me:$LINENO: checking for C compiler default output" >&5
  24382. +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
  24383. +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
  24384. +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
  24385. +  (eval $ac_link_default) 2>&5
  24386. +  ac_status=$?
  24387. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24388. +  (exit $ac_status); }; then
  24389. +  # Find the output, starting from the most likely.  This scheme is
  24390. +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
  24391. +# resort.
  24392. +
  24393. +# Be careful to initialize this variable, since it used to be cached.
  24394. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
  24395. +ac_cv_exeext=
  24396. +# b.out is created by i960 compilers.
  24397. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
  24398. +do
  24399. +  test -f "$ac_file" || continue
  24400. +  case $ac_file in
  24401. +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
  24402. +        ;;
  24403. +    conftest.$ac_ext )
  24404. +        # This is the source file.
  24405. +        ;;
  24406. +    [ab].out )
  24407. +        # We found the default executable, but exeext='' is most
  24408. +        # certainly right.
  24409. +        break;;
  24410. +    *.* )
  24411. +        ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  24412. +        # FIXME: I believe we export ac_cv_exeext for Libtool,
  24413. +        # but it would be cool to find out if it's true.  Does anybody
  24414. +        # maintain Libtool? --akim.
  24415. +        export ac_cv_exeext
  24416. +        break;;
  24417. +    * )
  24418. +        break;;
  24419. +  esac
  24420. +done
  24421.  else
  24422. -  cat > conftest.c <<EOF
  24423. -#ifdef __GNUC__
  24424. -  yes;
  24425. -#endif
  24426. -EOF
  24427. -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1201: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  24428. -  ac_cv_prog_gcc=yes
  24429. +  echo "$as_me: failed program was:" >&5
  24430. +sed 's/^/| /' conftest.$ac_ext >&5
  24431. +
  24432. +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
  24433. +See \`config.log' for more details." >&5
  24434. +echo "$as_me: error: C compiler cannot create executables
  24435. +See \`config.log' for more details." >&2;}
  24436. +   { (exit 77); exit 77; }; }
  24437. +fi
  24438. +
  24439. +ac_exeext=$ac_cv_exeext
  24440. +echo "$as_me:$LINENO: result: $ac_file" >&5
  24441. +echo "${ECHO_T}$ac_file" >&6
  24442. +
  24443. +# Check the compiler produces executables we can run.  If not, either
  24444. +# the compiler is broken, or we cross compile.
  24445. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5
  24446. +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
  24447. +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
  24448. +# If not cross compiling, check that we can run a simple program.
  24449. +if test "$cross_compiling" != yes; then
  24450. +  if { ac_try='./$ac_file'
  24451. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24452. +  (eval $ac_try) 2>&5
  24453. +  ac_status=$?
  24454. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24455. +  (exit $ac_status); }; }; then
  24456. +    cross_compiling=no
  24457. +  else
  24458. +    if test "$cross_compiling" = maybe; then
  24459. +    cross_compiling=yes
  24460. +    else
  24461. +    { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
  24462. +If you meant to cross compile, use \`--host'.
  24463. +See \`config.log' for more details." >&5
  24464. +echo "$as_me: error: cannot run C compiled programs.
  24465. +If you meant to cross compile, use \`--host'.
  24466. +See \`config.log' for more details." >&2;}
  24467. +   { (exit 1); exit 1; }; }
  24468. +    fi
  24469. +  fi
  24470. +fi
  24471. +echo "$as_me:$LINENO: result: yes" >&5
  24472. +echo "${ECHO_T}yes" >&6
  24473. +
  24474. +rm -f a.out a.exe conftest$ac_cv_exeext b.out
  24475. +ac_clean_files=$ac_clean_files_save
  24476. +# Check the compiler produces executables we can run.  If not, either
  24477. +# the compiler is broken, or we cross compile.
  24478. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
  24479. +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
  24480. +echo "$as_me:$LINENO: result: $cross_compiling" >&5
  24481. +echo "${ECHO_T}$cross_compiling" >&6
  24482. +
  24483. +echo "$as_me:$LINENO: checking for suffix of executables" >&5
  24484. +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
  24485. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  24486. +  (eval $ac_link) 2>&5
  24487. +  ac_status=$?
  24488. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24489. +  (exit $ac_status); }; then
  24490. +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
  24491. +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
  24492. +# work properly (i.e., refer to `conftest.exe'), while it won't with
  24493. +# `rm'.
  24494. +for ac_file in conftest.exe conftest conftest.*; do
  24495. +  test -f "$ac_file" || continue
  24496. +  case $ac_file in
  24497. +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
  24498. +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
  24499. +          export ac_cv_exeext
  24500. +          break;;
  24501. +    * ) break;;
  24502. +  esac
  24503. +done
  24504.  else
  24505. -  ac_cv_prog_gcc=no
  24506. -fi
  24507. -fi
  24508. +  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
  24509. +See \`config.log' for more details." >&5
  24510. +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
  24511. +See \`config.log' for more details." >&2;}
  24512. +   { (exit 1); exit 1; }; }
  24513. +fi
  24514. +
  24515. +rm -f conftest$ac_cv_exeext
  24516. +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
  24517. +echo "${ECHO_T}$ac_cv_exeext" >&6
  24518. +
  24519. +rm -f conftest.$ac_ext
  24520. +EXEEXT=$ac_cv_exeext
  24521. +ac_exeext=$EXEEXT
  24522. +echo "$as_me:$LINENO: checking for suffix of object files" >&5
  24523. +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
  24524. +if test "${ac_cv_objext+set}" = set; then
  24525. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24526. +else
  24527. +  cat >conftest.$ac_ext <<_ACEOF
  24528. +#line $LINENO "configure"
  24529. +/* confdefs.h.  */
  24530. +_ACEOF
  24531. +cat confdefs.h >>conftest.$ac_ext
  24532. +cat >>conftest.$ac_ext <<_ACEOF
  24533. +/* end confdefs.h.  */
  24534.  
  24535. -echo "$ac_t""$ac_cv_prog_gcc" 1>&6
  24536. +int
  24537. +main ()
  24538. +{
  24539.  
  24540. -if test $ac_cv_prog_gcc = yes; then
  24541. -  GCC=yes
  24542. +  ;
  24543. +  return 0;
  24544. +}
  24545. +_ACEOF
  24546. +rm -f conftest.o conftest.obj
  24547. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24548. +  (eval $ac_compile) 2>&5
  24549. +  ac_status=$?
  24550. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24551. +  (exit $ac_status); }; then
  24552. +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
  24553. +  case $ac_file in
  24554. +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
  24555. +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
  24556. +       break;;
  24557. +  esac
  24558. +done
  24559.  else
  24560. -  GCC=
  24561. -fi
  24562. +  echo "$as_me: failed program was:" >&5
  24563. +sed 's/^/| /' conftest.$ac_ext >&5
  24564.  
  24565. -ac_test_CFLAGS="${CFLAGS+set}"
  24566. -ac_save_CFLAGS="$CFLAGS"
  24567. -CFLAGS=
  24568. -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
  24569. -echo "configure:1220: checking whether ${CC-cc} accepts -g" >&5
  24570. -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  24571. -  echo $ac_n "(cached) $ac_c" 1>&6
  24572. -else
  24573. -  echo 'void f(){}' > conftest.c
  24574. -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  24575. +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
  24576. +See \`config.log' for more details." >&5
  24577. +echo "$as_me: error: cannot compute suffix of object files: cannot compile
  24578. +See \`config.log' for more details." >&2;}
  24579. +   { (exit 1); exit 1; }; }
  24580. +fi
  24581. +
  24582. +rm -f conftest.$ac_cv_objext conftest.$ac_ext
  24583. +fi
  24584. +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
  24585. +echo "${ECHO_T}$ac_cv_objext" >&6
  24586. +OBJEXT=$ac_cv_objext
  24587. +ac_objext=$OBJEXT
  24588. +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
  24589. +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
  24590. +if test "${ac_cv_c_compiler_gnu+set}" = set; then
  24591. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24592. +else
  24593. +  cat >conftest.$ac_ext <<_ACEOF
  24594. +#line $LINENO "configure"
  24595. +/* confdefs.h.  */
  24596. +_ACEOF
  24597. +cat confdefs.h >>conftest.$ac_ext
  24598. +cat >>conftest.$ac_ext <<_ACEOF
  24599. +/* end confdefs.h.  */
  24600. +
  24601. +int
  24602. +main ()
  24603. +{
  24604. +#ifndef __GNUC__
  24605. +       choke me
  24606. +#endif
  24607. +
  24608. +  ;
  24609. +  return 0;
  24610. +}
  24611. +_ACEOF
  24612. +rm -f conftest.$ac_objext
  24613. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24614. +  (eval $ac_compile) 2>&5
  24615. +  ac_status=$?
  24616. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24617. +  (exit $ac_status); } &&
  24618. +         { ac_try='test -s conftest.$ac_objext'
  24619. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24620. +  (eval $ac_try) 2>&5
  24621. +  ac_status=$?
  24622. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24623. +  (exit $ac_status); }; }; then
  24624. +  ac_compiler_gnu=yes
  24625. +else
  24626. +  echo "$as_me: failed program was:" >&5
  24627. +sed 's/^/| /' conftest.$ac_ext >&5
  24628. +
  24629. +ac_compiler_gnu=no
  24630. +fi
  24631. +rm -f conftest.$ac_objext conftest.$ac_ext
  24632. +ac_cv_c_compiler_gnu=$ac_compiler_gnu
  24633. +
  24634. +fi
  24635. +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
  24636. +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
  24637. +GCC=`test $ac_compiler_gnu = yes && echo yes`
  24638. +ac_test_CFLAGS=${CFLAGS+set}
  24639. +ac_save_CFLAGS=$CFLAGS
  24640. +CFLAGS="-g"
  24641. +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
  24642. +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
  24643. +if test "${ac_cv_prog_cc_g+set}" = set; then
  24644. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24645. +else
  24646. +  cat >conftest.$ac_ext <<_ACEOF
  24647. +#line $LINENO "configure"
  24648. +/* confdefs.h.  */
  24649. +_ACEOF
  24650. +cat confdefs.h >>conftest.$ac_ext
  24651. +cat >>conftest.$ac_ext <<_ACEOF
  24652. +/* end confdefs.h.  */
  24653. +
  24654. +int
  24655. +main ()
  24656. +{
  24657. +
  24658. +  ;
  24659. +  return 0;
  24660. +}
  24661. +_ACEOF
  24662. +rm -f conftest.$ac_objext
  24663. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24664. +  (eval $ac_compile) 2>&5
  24665. +  ac_status=$?
  24666. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24667. +  (exit $ac_status); } &&
  24668. +         { ac_try='test -s conftest.$ac_objext'
  24669. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24670. +  (eval $ac_try) 2>&5
  24671. +  ac_status=$?
  24672. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24673. +  (exit $ac_status); }; }; then
  24674.    ac_cv_prog_cc_g=yes
  24675.  else
  24676. -  ac_cv_prog_cc_g=no
  24677. -fi
  24678. -rm -f conftest*
  24679. +  echo "$as_me: failed program was:" >&5
  24680. +sed 's/^/| /' conftest.$ac_ext >&5
  24681.  
  24682. +ac_cv_prog_cc_g=no
  24683.  fi
  24684. -
  24685. -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  24686. +rm -f conftest.$ac_objext conftest.$ac_ext
  24687. +fi
  24688. +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
  24689. +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
  24690.  if test "$ac_test_CFLAGS" = set; then
  24691. -  CFLAGS="$ac_save_CFLAGS"
  24692. +  CFLAGS=$ac_save_CFLAGS
  24693.  elif test $ac_cv_prog_cc_g = yes; then
  24694.    if test "$GCC" = yes; then
  24695.      CFLAGS="-g -O2"
  24696. @@ -1246,8 +2402,225 @@
  24697.      CFLAGS=
  24698.    fi
  24699.  fi
  24700. -
  24701. -
  24702. +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
  24703. +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
  24704. +if test "${ac_cv_prog_cc_stdc+set}" = set; then
  24705. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24706. +else
  24707. +  ac_cv_prog_cc_stdc=no
  24708. +ac_save_CC=$CC
  24709. +cat >conftest.$ac_ext <<_ACEOF
  24710. +#line $LINENO "configure"
  24711. +/* confdefs.h.  */
  24712. +_ACEOF
  24713. +cat confdefs.h >>conftest.$ac_ext
  24714. +cat >>conftest.$ac_ext <<_ACEOF
  24715. +/* end confdefs.h.  */
  24716. +#include <stdarg.h>
  24717. +#include <stdio.h>
  24718. +#include <sys/types.h>
  24719. +#include <sys/stat.h>
  24720. +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
  24721. +struct buf { int x; };
  24722. +FILE * (*rcsopen) (struct buf *, struct stat *, int);
  24723. +static char *e (p, i)
  24724. +     char **p;
  24725. +     int i;
  24726. +{
  24727. +  return p[i];
  24728. +}
  24729. +static char *f (char * (*g) (char **, int), char **p, ...)
  24730. +{
  24731. +  char *s;
  24732. +  va_list v;
  24733. +  va_start (v,p);
  24734. +  s = g (p, va_arg (v,int));
  24735. +  va_end (v);
  24736. +  return s;
  24737. +}
  24738. +int test (int i, double x);
  24739. +struct s1 {int (*f) (int a);};
  24740. +struct s2 {int (*f) (double a);};
  24741. +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
  24742. +int argc;
  24743. +char **argv;
  24744. +int
  24745. +main ()
  24746. +{
  24747. +return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
  24748. +  ;
  24749. +  return 0;
  24750. +}
  24751. +_ACEOF
  24752. +# Don't try gcc -ansi; that turns off useful extensions and
  24753. +# breaks some systems' header files.
  24754. +# AIX            -qlanglvl=ansi
  24755. +# Ultrix and OSF/1    -std1
  24756. +# HP-UX 10.20 and later    -Ae
  24757. +# HP-UX older versions    -Aa -D_HPUX_SOURCE
  24758. +# SVR4            -Xc -D__EXTENSIONS__
  24759. +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
  24760. +do
  24761. +  CC="$ac_save_CC $ac_arg"
  24762. +  rm -f conftest.$ac_objext
  24763. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24764. +  (eval $ac_compile) 2>&5
  24765. +  ac_status=$?
  24766. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24767. +  (exit $ac_status); } &&
  24768. +         { ac_try='test -s conftest.$ac_objext'
  24769. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24770. +  (eval $ac_try) 2>&5
  24771. +  ac_status=$?
  24772. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24773. +  (exit $ac_status); }; }; then
  24774. +  ac_cv_prog_cc_stdc=$ac_arg
  24775. +break
  24776. +else
  24777. +  echo "$as_me: failed program was:" >&5
  24778. +sed 's/^/| /' conftest.$ac_ext >&5
  24779. +
  24780. +fi
  24781. +rm -f conftest.$ac_objext
  24782. +done
  24783. +rm -f conftest.$ac_ext conftest.$ac_objext
  24784. +CC=$ac_save_CC
  24785. +
  24786. +fi
  24787. +
  24788. +case "x$ac_cv_prog_cc_stdc" in
  24789. +  x|xno)
  24790. +    echo "$as_me:$LINENO: result: none needed" >&5
  24791. +echo "${ECHO_T}none needed" >&6 ;;
  24792. +  *)
  24793. +    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
  24794. +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
  24795. +    CC="$CC $ac_cv_prog_cc_stdc" ;;
  24796. +esac
  24797. +
  24798. +# Some people use a C++ compiler to compile C.  Since we use `exit',
  24799. +# in C++ we need to declare it.  In case someone uses the same compiler
  24800. +# for both compiling C and C++ we need to have the C++ compiler decide
  24801. +# the declaration of exit, since it's the most demanding environment.
  24802. +cat >conftest.$ac_ext <<_ACEOF
  24803. +#ifndef __cplusplus
  24804. +  choke me
  24805. +#endif
  24806. +_ACEOF
  24807. +rm -f conftest.$ac_objext
  24808. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24809. +  (eval $ac_compile) 2>&5
  24810. +  ac_status=$?
  24811. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24812. +  (exit $ac_status); } &&
  24813. +         { ac_try='test -s conftest.$ac_objext'
  24814. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24815. +  (eval $ac_try) 2>&5
  24816. +  ac_status=$?
  24817. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24818. +  (exit $ac_status); }; }; then
  24819. +  for ac_declaration in \
  24820. +   ''\
  24821. +   '#include <stdlib.h>' \
  24822. +   'extern "C" void std::exit (int) throw (); using std::exit;' \
  24823. +   'extern "C" void std::exit (int); using std::exit;' \
  24824. +   'extern "C" void exit (int) throw ();' \
  24825. +   'extern "C" void exit (int);' \
  24826. +   'void exit (int);'
  24827. +do
  24828. +  cat >conftest.$ac_ext <<_ACEOF
  24829. +#line $LINENO "configure"
  24830. +/* confdefs.h.  */
  24831. +_ACEOF
  24832. +cat confdefs.h >>conftest.$ac_ext
  24833. +cat >>conftest.$ac_ext <<_ACEOF
  24834. +/* end confdefs.h.  */
  24835. +#include <stdlib.h>
  24836. +$ac_declaration
  24837. +int
  24838. +main ()
  24839. +{
  24840. +exit (42);
  24841. +  ;
  24842. +  return 0;
  24843. +}
  24844. +_ACEOF
  24845. +rm -f conftest.$ac_objext
  24846. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24847. +  (eval $ac_compile) 2>&5
  24848. +  ac_status=$?
  24849. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24850. +  (exit $ac_status); } &&
  24851. +         { ac_try='test -s conftest.$ac_objext'
  24852. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24853. +  (eval $ac_try) 2>&5
  24854. +  ac_status=$?
  24855. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24856. +  (exit $ac_status); }; }; then
  24857. +  :
  24858. +else
  24859. +  echo "$as_me: failed program was:" >&5
  24860. +sed 's/^/| /' conftest.$ac_ext >&5
  24861. +
  24862. +continue
  24863. +fi
  24864. +rm -f conftest.$ac_objext conftest.$ac_ext
  24865. +  cat >conftest.$ac_ext <<_ACEOF
  24866. +#line $LINENO "configure"
  24867. +/* confdefs.h.  */
  24868. +_ACEOF
  24869. +cat confdefs.h >>conftest.$ac_ext
  24870. +cat >>conftest.$ac_ext <<_ACEOF
  24871. +/* end confdefs.h.  */
  24872. +$ac_declaration
  24873. +int
  24874. +main ()
  24875. +{
  24876. +exit (42);
  24877. +  ;
  24878. +  return 0;
  24879. +}
  24880. +_ACEOF
  24881. +rm -f conftest.$ac_objext
  24882. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  24883. +  (eval $ac_compile) 2>&5
  24884. +  ac_status=$?
  24885. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24886. +  (exit $ac_status); } &&
  24887. +         { ac_try='test -s conftest.$ac_objext'
  24888. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  24889. +  (eval $ac_try) 2>&5
  24890. +  ac_status=$?
  24891. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  24892. +  (exit $ac_status); }; }; then
  24893. +  break
  24894. +else
  24895. +  echo "$as_me: failed program was:" >&5
  24896. +sed 's/^/| /' conftest.$ac_ext >&5
  24897. +
  24898. +fi
  24899. +rm -f conftest.$ac_objext conftest.$ac_ext
  24900. +done
  24901. +rm -f conftest*
  24902. +if test -n "$ac_declaration"; then
  24903. +  echo '#ifdef __cplusplus' >>confdefs.h
  24904. +  echo $ac_declaration      >>confdefs.h
  24905. +  echo '#endif'             >>confdefs.h
  24906. +fi
  24907. +
  24908. +else
  24909. +  echo "$as_me: failed program was:" >&5
  24910. +sed 's/^/| /' conftest.$ac_ext >&5
  24911. +
  24912. +fi
  24913. +rm -f conftest.$ac_objext conftest.$ac_ext
  24914. +ac_ext=c
  24915. +ac_cpp='$CPP $CPPFLAGS'
  24916. +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  24917. +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  24918. +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  24919. +
  24920. +
  24921.  # If the native compiler is GCC, we can enable warnings even in stage1.  
  24922.  # That's useful for people building cross-compilers, or just running a
  24923.  # quick `make'.
  24924. @@ -1258,175 +2631,355 @@
  24925.  fi
  24926.  
  24927.  
  24928. -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
  24929. -echo "configure:1263: checking whether ${MAKE-make} sets \${MAKE}" >&5
  24930. -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  24931. -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
  24932. -  echo $ac_n "(cached) $ac_c" 1>&6
  24933. +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
  24934. +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
  24935. +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
  24936. +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
  24937. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  24938.  else
  24939. -  cat > conftestmake <<\EOF
  24940. +  cat >conftest.make <<\_ACEOF
  24941.  all:
  24942. -    @echo 'ac_maketemp="${MAKE}"'
  24943. -EOF
  24944. +    @echo 'ac_maketemp="$(MAKE)"'
  24945. +_ACEOF
  24946.  # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  24947. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  24948. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
  24949.  if test -n "$ac_maketemp"; then
  24950.    eval ac_cv_prog_make_${ac_make}_set=yes
  24951.  else
  24952.    eval ac_cv_prog_make_${ac_make}_set=no
  24953.  fi
  24954. -rm -f conftestmake
  24955. +rm -f conftest.make
  24956.  fi
  24957.  if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  24958. -  echo "$ac_t""yes" 1>&6
  24959. +  echo "$as_me:$LINENO: result: yes" >&5
  24960. +echo "${ECHO_T}yes" >&6
  24961.    SET_MAKE=
  24962.  else
  24963. -  echo "$ac_t""no" 1>&6
  24964. +  echo "$as_me:$LINENO: result: no" >&5
  24965. +echo "${ECHO_T}no" >&6
  24966.    SET_MAKE="MAKE=${MAKE-make}"
  24967.  fi
  24968.  
  24969.  
  24970. -echo $ac_n "checking whether a default assembler was specified""... $ac_c" 1>&6
  24971. -echo "configure:1291: checking whether a default assembler was specified" >&5
  24972. +echo "$as_me:$LINENO: checking whether a default assembler was specified" >&5
  24973. +echo $ECHO_N "checking whether a default assembler was specified... $ECHO_C" >&6
  24974.  if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
  24975.      if test x"$gas_flag" = x"no"; then
  24976. -        echo "$ac_t""yes ($DEFAULT_ASSEMBLER)" 1>&6
  24977. +        echo "$as_me:$LINENO: result: yes ($DEFAULT_ASSEMBLER)" >&5
  24978. +echo "${ECHO_T}yes ($DEFAULT_ASSEMBLER)" >&6
  24979.      else
  24980. -    echo "$ac_t""yes ($DEFAULT_ASSEMBLER - GNU as)" 1>&6
  24981. +    echo "$as_me:$LINENO: result: yes ($DEFAULT_ASSEMBLER - GNU as)" >&5
  24982. +echo "${ECHO_T}yes ($DEFAULT_ASSEMBLER - GNU as)" >&6
  24983.      fi
  24984.  else
  24985. -    echo "$ac_t""no" 1>&6
  24986. +    echo "$as_me:$LINENO: result: no" >&5
  24987. +echo "${ECHO_T}no" >&6
  24988.  fi
  24989.  
  24990. -echo $ac_n "checking whether a default linker was specified""... $ac_c" 1>&6
  24991. -echo "configure:1303: checking whether a default linker was specified" >&5
  24992. +echo "$as_me:$LINENO: checking whether a default linker was specified" >&5
  24993. +echo $ECHO_N "checking whether a default linker was specified... $ECHO_C" >&6
  24994.  if test x"${DEFAULT_LINKER+set}" = x"set"; then
  24995.      if test x"$gnu_ld_flag" = x"no"; then
  24996. -    echo "$ac_t""yes ($DEFAULT_LINKER)" 1>&6
  24997. +    echo "$as_me:$LINENO: result: yes ($DEFAULT_LINKER)" >&5
  24998. +echo "${ECHO_T}yes ($DEFAULT_LINKER)" >&6
  24999.      else
  25000. -    echo "$ac_t""yes ($DEFAULT_LINKER - GNU ld)" 1>&6
  25001. +    echo "$as_me:$LINENO: result: yes ($DEFAULT_LINKER - GNU ld)" >&5
  25002. +echo "${ECHO_T}yes ($DEFAULT_LINKER - GNU ld)" >&6
  25003.      fi
  25004.  else
  25005. -    echo "$ac_t""no" 1>&6
  25006. +    echo "$as_me:$LINENO: result: no" >&5
  25007. +echo "${ECHO_T}no" >&6
  25008.  fi
  25009.  
  25010.  # Find some useful tools
  25011.  for ac_prog in gawk mawk nawk awk
  25012.  do
  25013. -# Extract the first word of "$ac_prog", so it can be a program name with args.
  25014. +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  25015.  set dummy $ac_prog; ac_word=$2
  25016. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  25017. -echo "configure:1320: checking for $ac_word" >&5
  25018. -if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
  25019. -  echo $ac_n "(cached) $ac_c" 1>&6
  25020. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  25021. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  25022. +if test "${ac_cv_prog_AWK+set}" = set; then
  25023. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25024.  else
  25025.    if test -n "$AWK"; then
  25026.    ac_cv_prog_AWK="$AWK" # Let the user override the test.
  25027.  else
  25028. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  25029. -  ac_dummy="$PATH"
  25030. -  for ac_dir in $ac_dummy; do
  25031. -    test -z "$ac_dir" && ac_dir=.
  25032. -    if test -f $ac_dir/$ac_word; then
  25033. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  25034. +for as_dir in $PATH
  25035. +do
  25036. +  IFS=$as_save_IFS
  25037. +  test -z "$as_dir" && as_dir=.
  25038. +  for ac_exec_ext in '' $ac_executable_extensions; do
  25039. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  25040.        ac_cv_prog_AWK="$ac_prog"
  25041. -      break
  25042. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  25043. +    break 2
  25044.      fi
  25045. -  done
  25046. -  IFS="$ac_save_ifs"
  25047. +done
  25048. +done
  25049. +
  25050.  fi
  25051.  fi
  25052. -AWK="$ac_cv_prog_AWK"
  25053. +AWK=$ac_cv_prog_AWK
  25054.  if test -n "$AWK"; then
  25055. -  echo "$ac_t""$AWK" 1>&6
  25056. +  echo "$as_me:$LINENO: result: $AWK" >&5
  25057. +echo "${ECHO_T}$AWK" >&6
  25058.  else
  25059. -  echo "$ac_t""no" 1>&6
  25060. +  echo "$as_me:$LINENO: result: no" >&5
  25061. +echo "${ECHO_T}no" >&6
  25062.  fi
  25063.  
  25064. -test -n "$AWK" && break
  25065. +  test -n "$AWK" && break
  25066.  done
  25067.  
  25068. -# Extract the first word of "flex", so it can be a program name with args.
  25069. -set dummy flex; ac_word=$2
  25070. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  25071. -echo "configure:1352: checking for $ac_word" >&5
  25072. -if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
  25073. -  echo $ac_n "(cached) $ac_c" 1>&6
  25074. +
  25075. +for ac_prog in flex lex
  25076. +do
  25077. +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  25078. +set dummy $ac_prog; ac_word=$2
  25079. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  25080. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  25081. +if test "${ac_cv_prog_LEX+set}" = set; then
  25082. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25083.  else
  25084.    if test -n "$LEX"; then
  25085.    ac_cv_prog_LEX="$LEX" # Let the user override the test.
  25086.  else
  25087. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  25088. -  ac_dummy="$PATH"
  25089. -  for ac_dir in $ac_dummy; do
  25090. -    test -z "$ac_dir" && ac_dir=.
  25091. -    if test -f $ac_dir/$ac_word; then
  25092. -      ac_cv_prog_LEX="flex"
  25093. -      break
  25094. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  25095. +for as_dir in $PATH
  25096. +do
  25097. +  IFS=$as_save_IFS
  25098. +  test -z "$as_dir" && as_dir=.
  25099. +  for ac_exec_ext in '' $ac_executable_extensions; do
  25100. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  25101. +    ac_cv_prog_LEX="$ac_prog"
  25102. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  25103. +    break 2
  25104.      fi
  25105. -  done
  25106. -  IFS="$ac_save_ifs"
  25107. -  test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex"
  25108. +done
  25109. +done
  25110. +
  25111.  fi
  25112.  fi
  25113. -LEX="$ac_cv_prog_LEX"
  25114. +LEX=$ac_cv_prog_LEX
  25115.  if test -n "$LEX"; then
  25116. -  echo "$ac_t""$LEX" 1>&6
  25117. +  echo "$as_me:$LINENO: result: $LEX" >&5
  25118. +echo "${ECHO_T}$LEX" >&6
  25119.  else
  25120. -  echo "$ac_t""no" 1>&6
  25121. +  echo "$as_me:$LINENO: result: no" >&5
  25122. +echo "${ECHO_T}no" >&6
  25123.  fi
  25124.  
  25125. +  test -n "$LEX" && break
  25126. +done
  25127. +test -n "$LEX" || LEX=":"
  25128. +
  25129.  if test -z "$LEXLIB"
  25130.  then
  25131. -  case "$LEX" in
  25132. -  flex*) ac_lib=fl ;;
  25133. -  *) ac_lib=l ;;
  25134. -  esac
  25135. -  echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
  25136. -echo "configure:1386: checking for yywrap in -l$ac_lib" >&5
  25137. -ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
  25138. -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  25139. -  echo $ac_n "(cached) $ac_c" 1>&6
  25140. -else
  25141. -  ac_save_LIBS="$LIBS"
  25142. -LIBS="-l$ac_lib  $LIBS"
  25143. -cat > conftest.$ac_ext <<EOF
  25144. -#line 1394 "configure"
  25145. -#include "confdefs.h"
  25146. +  echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5
  25147. +echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6
  25148. +if test "${ac_cv_lib_fl_yywrap+set}" = set; then
  25149. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25150. +else
  25151. +  ac_check_lib_save_LIBS=$LIBS
  25152. +LIBS="-lfl  $LIBS"
  25153. +cat >conftest.$ac_ext <<_ACEOF
  25154. +#line $LINENO "configure"
  25155. +/* confdefs.h.  */
  25156. +_ACEOF
  25157. +cat confdefs.h >>conftest.$ac_ext
  25158. +cat >>conftest.$ac_ext <<_ACEOF
  25159. +/* end confdefs.h.  */
  25160. +
  25161.  /* Override any gcc2 internal prototype to avoid an error.  */
  25162. +#ifdef __cplusplus
  25163. +extern "C"
  25164. +#endif
  25165.  /* We use char because int might match the return type of a gcc2
  25166.      builtin and then its argument prototype would still apply.  */
  25167. -char yywrap();
  25168. +char yywrap ();
  25169. +int
  25170. +main ()
  25171. +{
  25172. +yywrap ();
  25173. +  ;
  25174. +  return 0;
  25175. +}
  25176. +_ACEOF
  25177. +rm -f conftest.$ac_objext conftest$ac_exeext
  25178. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  25179. +  (eval $ac_link) 2>&5
  25180. +  ac_status=$?
  25181. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25182. +  (exit $ac_status); } &&
  25183. +         { ac_try='test -s conftest$ac_exeext'
  25184. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  25185. +  (eval $ac_try) 2>&5
  25186. +  ac_status=$?
  25187. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25188. +  (exit $ac_status); }; }; then
  25189. +  ac_cv_lib_fl_yywrap=yes
  25190. +else
  25191. +  echo "$as_me: failed program was:" >&5
  25192. +sed 's/^/| /' conftest.$ac_ext >&5
  25193. +
  25194. +ac_cv_lib_fl_yywrap=no
  25195. +fi
  25196. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  25197. +LIBS=$ac_check_lib_save_LIBS
  25198. +fi
  25199. +echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5
  25200. +echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6
  25201. +if test $ac_cv_lib_fl_yywrap = yes; then
  25202. +  LEXLIB="-lfl"
  25203. +else
  25204. +  echo "$as_me:$LINENO: checking for yywrap in -ll" >&5
  25205. +echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6
  25206. +if test "${ac_cv_lib_l_yywrap+set}" = set; then
  25207. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25208. +else
  25209. +  ac_check_lib_save_LIBS=$LIBS
  25210. +LIBS="-ll  $LIBS"
  25211. +cat >conftest.$ac_ext <<_ACEOF
  25212. +#line $LINENO "configure"
  25213. +/* confdefs.h.  */
  25214. +_ACEOF
  25215. +cat confdefs.h >>conftest.$ac_ext
  25216. +cat >>conftest.$ac_ext <<_ACEOF
  25217. +/* end confdefs.h.  */
  25218.  
  25219. -int main() {
  25220. -yywrap()
  25221. -; return 0; }
  25222. -EOF
  25223. -if { (eval echo configure:1405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  25224. -  rm -rf conftest*
  25225. -  eval "ac_cv_lib_$ac_lib_var=yes"
  25226. -else
  25227. -  echo "configure: failed program was:" >&5
  25228. -  cat conftest.$ac_ext >&5
  25229. -  rm -rf conftest*
  25230. -  eval "ac_cv_lib_$ac_lib_var=no"
  25231. +/* Override any gcc2 internal prototype to avoid an error.  */
  25232. +#ifdef __cplusplus
  25233. +extern "C"
  25234. +#endif
  25235. +/* We use char because int might match the return type of a gcc2
  25236. +   builtin and then its argument prototype would still apply.  */
  25237. +char yywrap ();
  25238. +int
  25239. +main ()
  25240. +{
  25241. +yywrap ();
  25242. +  ;
  25243. +  return 0;
  25244. +}
  25245. +_ACEOF
  25246. +rm -f conftest.$ac_objext conftest$ac_exeext
  25247. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  25248. +  (eval $ac_link) 2>&5
  25249. +  ac_status=$?
  25250. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25251. +  (exit $ac_status); } &&
  25252. +         { ac_try='test -s conftest$ac_exeext'
  25253. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  25254. +  (eval $ac_try) 2>&5
  25255. +  ac_status=$?
  25256. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25257. +  (exit $ac_status); }; }; then
  25258. +  ac_cv_lib_l_yywrap=yes
  25259. +else
  25260. +  echo "$as_me: failed program was:" >&5
  25261. +sed 's/^/| /' conftest.$ac_ext >&5
  25262. +
  25263. +ac_cv_lib_l_yywrap=no
  25264. +fi
  25265. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  25266. +LIBS=$ac_check_lib_save_LIBS
  25267. +fi
  25268. +echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5
  25269. +echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6
  25270. +if test $ac_cv_lib_l_yywrap = yes; then
  25271. +  LEXLIB="-ll"
  25272.  fi
  25273. -rm -f conftest*
  25274. -LIBS="$ac_save_LIBS"
  25275.  
  25276.  fi
  25277. -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  25278. -  echo "$ac_t""yes" 1>&6
  25279. -  LEXLIB="-l$ac_lib"
  25280. -else
  25281. -  echo "$ac_t""no" 1>&6
  25282. -fi
  25283.  
  25284.  fi
  25285.  
  25286. -echo $ac_n "checking whether ln works""... $ac_c" 1>&6
  25287. -echo "configure:1428: checking whether ln works" >&5
  25288. -if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then
  25289. -  echo $ac_n "(cached) $ac_c" 1>&6
  25290. +if test "x$LEX" != "x:"; then
  25291. +  echo "$as_me:$LINENO: checking lex output file root" >&5
  25292. +echo $ECHO_N "checking lex output file root... $ECHO_C" >&6
  25293. +if test "${ac_cv_prog_lex_root+set}" = set; then
  25294. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25295. +else
  25296. +  # The minimal lex program is just a single line: %%.  But some broken lexes
  25297. +# (Solaris, I think it was) want two %% lines, so accommodate them.
  25298. +cat >conftest.l <<_ACEOF
  25299. +%%
  25300. +%%
  25301. +_ACEOF
  25302. +{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5
  25303. +  (eval $LEX conftest.l) 2>&5
  25304. +  ac_status=$?
  25305. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25306. +  (exit $ac_status); }
  25307. +if test -f lex.yy.c; then
  25308. +  ac_cv_prog_lex_root=lex.yy
  25309. +elif test -f lexyy.c; then
  25310. +  ac_cv_prog_lex_root=lexyy
  25311. +else
  25312. +  { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5
  25313. +echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
  25314. +   { (exit 1); exit 1; }; }
  25315. +fi
  25316. +fi
  25317. +echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5
  25318. +echo "${ECHO_T}$ac_cv_prog_lex_root" >&6
  25319. +rm -f conftest.l
  25320. +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
  25321. +
  25322. +echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5
  25323. +echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6
  25324. +if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then
  25325. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25326. +else
  25327. +  # POSIX says lex can declare yytext either as a pointer or an array; the
  25328. +# default is implementation-dependent. Figure out which it is, since
  25329. +# not all implementations provide the %pointer and %array declarations.
  25330. +ac_cv_prog_lex_yytext_pointer=no
  25331. +echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
  25332. +ac_save_LIBS=$LIBS
  25333. +LIBS="$LIBS $LEXLIB"
  25334. +cat >conftest.$ac_ext <<_ACEOF
  25335. +`cat $LEX_OUTPUT_ROOT.c`
  25336. +_ACEOF
  25337. +rm -f conftest.$ac_objext conftest$ac_exeext
  25338. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  25339. +  (eval $ac_link) 2>&5
  25340. +  ac_status=$?
  25341. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25342. +  (exit $ac_status); } &&
  25343. +         { ac_try='test -s conftest$ac_exeext'
  25344. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  25345. +  (eval $ac_try) 2>&5
  25346. +  ac_status=$?
  25347. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25348. +  (exit $ac_status); }; }; then
  25349. +  ac_cv_prog_lex_yytext_pointer=yes
  25350. +else
  25351. +  echo "$as_me: failed program was:" >&5
  25352. +sed 's/^/| /' conftest.$ac_ext >&5
  25353. +
  25354. +fi
  25355. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  25356. +LIBS=$ac_save_LIBS
  25357. +rm -f "${LEX_OUTPUT_ROOT}.c"
  25358. +
  25359. +fi
  25360. +echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5
  25361. +echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6
  25362. +if test $ac_cv_prog_lex_yytext_pointer = yes; then
  25363. +
  25364. +cat >>confdefs.h <<\_ACEOF
  25365. +#define YYTEXT_POINTER 1
  25366. +_ACEOF
  25367. +
  25368. +fi
  25369. +
  25370. +fi
  25371. +echo "$as_me:$LINENO: checking whether ln works" >&5
  25372. +echo $ECHO_N "checking whether ln works... $ECHO_C" >&6
  25373. +if test "${gcc_cv_prog_LN+set}" = set; then
  25374. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25375.  else
  25376.    rm -f conftestdata_t
  25377.  echo >conftestdata_f
  25378. @@ -1446,19 +2999,22 @@
  25379.  fi
  25380.  LN="$gcc_cv_prog_LN"
  25381.  if test "$gcc_cv_prog_LN" = "ln"; then
  25382. -  echo "$ac_t""yes" 1>&6
  25383. +  echo "$as_me:$LINENO: result: yes" >&5
  25384. +echo "${ECHO_T}yes" >&6
  25385.  else
  25386.    if test "$gcc_cv_prog_LN" = "ln -s"; then
  25387. -    echo "$ac_t""no, using ln -s" 1>&6
  25388. +    echo "$as_me:$LINENO: result: no, using ln -s" >&5
  25389. +echo "${ECHO_T}no, using ln -s" >&6
  25390.    else
  25391. -    echo "$ac_t""no, and neither does ln -s, so using cp" 1>&6
  25392. +    echo "$as_me:$LINENO: result: no, and neither does ln -s, so using cp" >&5
  25393. +echo "${ECHO_T}no, and neither does ln -s, so using cp" >&6
  25394.    fi
  25395.  fi
  25396.  
  25397. -echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
  25398. -echo "configure:1460: checking whether ln -s works" >&5
  25399. -if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then
  25400. -  echo $ac_n "(cached) $ac_c" 1>&6
  25401. +echo "$as_me:$LINENO: checking whether ln -s works" >&5
  25402. +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
  25403. +if test "${gcc_cv_prog_LN_S+set}" = set; then
  25404. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25405.  else
  25406.    rm -f conftestdata_t
  25407.  echo >conftestdata_f
  25408. @@ -1478,110 +3034,187 @@
  25409.  fi
  25410.  LN_S="$gcc_cv_prog_LN_S"
  25411.  if test "$gcc_cv_prog_LN_S" = "ln -s"; then
  25412. -  echo "$ac_t""yes" 1>&6
  25413. +  echo "$as_me:$LINENO: result: yes" >&5
  25414. +echo "${ECHO_T}yes" >&6
  25415.  else
  25416.    if test "$gcc_cv_prog_LN_S" = "ln"; then
  25417. -    echo "$ac_t""no, using ln" 1>&6
  25418. +    echo "$as_me:$LINENO: result: no, using ln" >&5
  25419. +echo "${ECHO_T}no, using ln" >&6
  25420.    else
  25421. -    echo "$ac_t""no, and neither does ln, so using cp" 1>&6
  25422. +    echo "$as_me:$LINENO: result: no, and neither does ln, so using cp" >&5
  25423. +echo "${ECHO_T}no, and neither does ln, so using cp" >&6
  25424.    fi
  25425.  fi
  25426.  
  25427. -echo $ac_n "checking for volatile""... $ac_c" 1>&6
  25428. -echo "configure:1492: checking for volatile" >&5
  25429. -if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then
  25430. -  echo $ac_n "(cached) $ac_c" 1>&6
  25431. -else
  25432. -  cat > conftest.$ac_ext <<EOF
  25433. -#line 1497 "configure"
  25434. -#include "confdefs.h"
  25435. +echo "$as_me:$LINENO: checking for volatile" >&5
  25436. +echo $ECHO_N "checking for volatile... $ECHO_C" >&6
  25437. +if test "${gcc_cv_c_volatile+set}" = set; then
  25438. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25439. +else
  25440. +  cat >conftest.$ac_ext <<_ACEOF
  25441. +#line $LINENO "configure"
  25442. +/* confdefs.h.  */
  25443. +_ACEOF
  25444. +cat confdefs.h >>conftest.$ac_ext
  25445. +cat >>conftest.$ac_ext <<_ACEOF
  25446. +/* end confdefs.h.  */
  25447.  
  25448. -int main() {
  25449. +int
  25450. +main ()
  25451. +{
  25452.  volatile int foo;
  25453. -; return 0; }
  25454. -EOF
  25455. -if { (eval echo configure:1504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  25456. -  rm -rf conftest*
  25457. +  ;
  25458. +  return 0;
  25459. +}
  25460. +_ACEOF
  25461. +rm -f conftest.$ac_objext
  25462. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  25463. +  (eval $ac_compile) 2>&5
  25464. +  ac_status=$?
  25465. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25466. +  (exit $ac_status); } &&
  25467. +         { ac_try='test -s conftest.$ac_objext'
  25468. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  25469. +  (eval $ac_try) 2>&5
  25470. +  ac_status=$?
  25471. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25472. +  (exit $ac_status); }; }; then
  25473.    gcc_cv_c_volatile=yes
  25474.  else
  25475. -  echo "configure: failed program was:" >&5
  25476. -  cat conftest.$ac_ext >&5
  25477. -  rm -rf conftest*
  25478. -  gcc_cv_c_volatile=no
  25479. +  echo "$as_me: failed program was:" >&5
  25480. +sed 's/^/| /' conftest.$ac_ext >&5
  25481. +
  25482. +gcc_cv_c_volatile=no
  25483.  fi
  25484. -rm -f conftest*
  25485. +rm -f conftest.$ac_objext conftest.$ac_ext
  25486.  fi
  25487. -
  25488. -echo "$ac_t""$gcc_cv_c_volatile" 1>&6
  25489. +echo "$as_me:$LINENO: result: $gcc_cv_c_volatile" >&5
  25490. +echo "${ECHO_T}$gcc_cv_c_volatile" >&6
  25491.  if test $gcc_cv_c_volatile = yes ; then
  25492. -  cat >> confdefs.h <<\EOF
  25493. +  cat >>confdefs.h <<\_ACEOF
  25494.  #define HAVE_VOLATILE 1
  25495. -EOF
  25496. +_ACEOF
  25497.  
  25498.  fi
  25499.  
  25500. -# Extract the first word of "ranlib", so it can be a program name with args.
  25501. -set dummy ranlib; ac_word=$2
  25502. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  25503. -echo "configure:1527: checking for $ac_word" >&5
  25504. -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
  25505. -  echo $ac_n "(cached) $ac_c" 1>&6
  25506. +if test -n "$ac_tool_prefix"; then
  25507. +  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
  25508. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2
  25509. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  25510. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  25511. +if test "${ac_cv_prog_RANLIB+set}" = set; then
  25512. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25513.  else
  25514.    if test -n "$RANLIB"; then
  25515.    ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
  25516.  else
  25517. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  25518. -  ac_dummy="$PATH"
  25519. -  for ac_dir in $ac_dummy; do
  25520. -    test -z "$ac_dir" && ac_dir=.
  25521. -    if test -f $ac_dir/$ac_word; then
  25522. -      ac_cv_prog_RANLIB="ranlib"
  25523. -      break
  25524. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  25525. +for as_dir in $PATH
  25526. +do
  25527. +  IFS=$as_save_IFS
  25528. +  test -z "$as_dir" && as_dir=.
  25529. +  for ac_exec_ext in '' $ac_executable_extensions; do
  25530. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  25531. +    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
  25532. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  25533. +    break 2
  25534.      fi
  25535. -  done
  25536. -  IFS="$ac_save_ifs"
  25537. -  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
  25538. +done
  25539. +done
  25540. +
  25541.  fi
  25542.  fi
  25543. -RANLIB="$ac_cv_prog_RANLIB"
  25544. +RANLIB=$ac_cv_prog_RANLIB
  25545.  if test -n "$RANLIB"; then
  25546. -  echo "$ac_t""$RANLIB" 1>&6
  25547. +  echo "$as_me:$LINENO: result: $RANLIB" >&5
  25548. +echo "${ECHO_T}$RANLIB" >&6
  25549. +else
  25550. +  echo "$as_me:$LINENO: result: no" >&5
  25551. +echo "${ECHO_T}no" >&6
  25552. +fi
  25553. +
  25554. +fi
  25555. +if test -z "$ac_cv_prog_RANLIB"; then
  25556. +  ac_ct_RANLIB=$RANLIB
  25557. +  # Extract the first word of "ranlib", so it can be a program name with args.
  25558. +set dummy ranlib; ac_word=$2
  25559. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  25560. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  25561. +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
  25562. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25563. +else
  25564. +  if test -n "$ac_ct_RANLIB"; then
  25565. +  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
  25566. +else
  25567. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  25568. +for as_dir in $PATH
  25569. +do
  25570. +  IFS=$as_save_IFS
  25571. +  test -z "$as_dir" && as_dir=.
  25572. +  for ac_exec_ext in '' $ac_executable_extensions; do
  25573. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  25574. +    ac_cv_prog_ac_ct_RANLIB="ranlib"
  25575. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  25576. +    break 2
  25577. +  fi
  25578. +done
  25579. +done
  25580. +
  25581. +  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
  25582. +fi
  25583. +fi
  25584. +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
  25585. +if test -n "$ac_ct_RANLIB"; then
  25586. +  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
  25587. +echo "${ECHO_T}$ac_ct_RANLIB" >&6
  25588. +else
  25589. +  echo "$as_me:$LINENO: result: no" >&5
  25590. +echo "${ECHO_T}no" >&6
  25591. +fi
  25592. +
  25593. +  RANLIB=$ac_ct_RANLIB
  25594.  else
  25595. -  echo "$ac_t""no" 1>&6
  25596. +  RANLIB="$ac_cv_prog_RANLIB"
  25597.  fi
  25598.  
  25599.  for ac_prog in 'bison -y' byacc
  25600.  do
  25601. -# Extract the first word of "$ac_prog", so it can be a program name with args.
  25602. +  # Extract the first word of "$ac_prog", so it can be a program name with args.
  25603.  set dummy $ac_prog; ac_word=$2
  25604. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  25605. -echo "configure:1559: checking for $ac_word" >&5
  25606. -if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
  25607. -  echo $ac_n "(cached) $ac_c" 1>&6
  25608. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  25609. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  25610. +if test "${ac_cv_prog_YACC+set}" = set; then
  25611. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25612.  else
  25613.    if test -n "$YACC"; then
  25614.    ac_cv_prog_YACC="$YACC" # Let the user override the test.
  25615.  else
  25616. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  25617. -  ac_dummy="$PATH"
  25618. -  for ac_dir in $ac_dummy; do
  25619. -    test -z "$ac_dir" && ac_dir=.
  25620. -    if test -f $ac_dir/$ac_word; then
  25621. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  25622. +for as_dir in $PATH
  25623. +do
  25624. +  IFS=$as_save_IFS
  25625. +  test -z "$as_dir" && as_dir=.
  25626. +  for ac_exec_ext in '' $ac_executable_extensions; do
  25627. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  25628.        ac_cv_prog_YACC="$ac_prog"
  25629. -      break
  25630. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  25631. +    break 2
  25632.      fi
  25633. -  done
  25634. -  IFS="$ac_save_ifs"
  25635. +done
  25636. +done
  25637. +
  25638.  fi
  25639.  fi
  25640. -YACC="$ac_cv_prog_YACC"
  25641. +YACC=$ac_cv_prog_YACC
  25642.  if test -n "$YACC"; then
  25643. -  echo "$ac_t""$YACC" 1>&6
  25644. +  echo "$as_me:$LINENO: result: $YACC" >&5
  25645. +echo "${ECHO_T}$YACC" >&6
  25646.  else
  25647. -  echo "$ac_t""no" 1>&6
  25648. +  echo "$as_me:$LINENO: result: no" >&5
  25649. +echo "${ECHO_T}no" >&6
  25650.  fi
  25651.  
  25652. -test -n "$YACC" && break
  25653. +  test -n "$YACC" && break
  25654.  done
  25655.  test -n "$YACC" || YACC="yacc"
  25656.  
  25657. @@ -1595,11 +3228,11 @@
  25658.  # AFS /usr/afsws/bin/install, which mishandles nonexistent args
  25659.  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  25660.  # ./install, which can be erroneously created by make from ./install.sh.
  25661. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
  25662. -echo "configure:1600: checking for a BSD compatible install" >&5
  25663. +echo "$as_me:$LINENO: checking for a BSD compatible install" >&5
  25664. +echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
  25665.  if test -z "$INSTALL"; then
  25666. -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
  25667. -  echo $ac_n "(cached) $ac_c" 1>&6
  25668. +if test "${ac_cv_path_install+set}" = set; then
  25669. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25670.  else
  25671.      IFS="${IFS=     }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
  25672.    for ac_dir in $PATH; do
  25673. @@ -1637,7 +3270,8 @@
  25674.      INSTALL="$ac_install_sh"
  25675.    fi
  25676.  fi
  25677. -echo "$ac_t""$INSTALL" 1>&6
  25678. +echo "$as_me:$LINENO: result: $INSTALL" >&5
  25679. +echo "${ECHO_T}$INSTALL" >&6
  25680.  
  25681.  # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
  25682.  # It thinks the first close brace ends the variable substitution.
  25683. @@ -1646,126 +3280,318 @@
  25684.  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  25685.  
  25686.  
  25687. -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
  25688. -echo "configure:1651: checking how to run the C preprocessor" >&5
  25689. +ac_ext=c
  25690. +ac_cpp='$CPP $CPPFLAGS'
  25691. +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  25692. +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  25693. +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  25694. +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
  25695. +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
  25696.  # On Suns, sometimes $CPP names a directory.
  25697.  if test -n "$CPP" && test -d "$CPP"; then
  25698.    CPP=
  25699.  fi
  25700.  if test -z "$CPP"; then
  25701. -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  25702. -  echo $ac_n "(cached) $ac_c" 1>&6
  25703. +  if test "${ac_cv_prog_CPP+set}" = set; then
  25704. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25705.  else
  25706. -    # This must be in double quotes, not single quotes, because CPP may get
  25707. -  # substituted into the Makefile and "${CC-cc}" will confuse make.
  25708. -  CPP="${CC-cc} -E"
  25709. +      # Double quotes because CPP needs to be expanded
  25710. +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
  25711. +    do
  25712. +      ac_preproc_ok=false
  25713. +for ac_c_preproc_warn_flag in '' yes
  25714. +do
  25715. +  # Use a header file that comes with gcc, so configuring glibc
  25716. +  # with a fresh cross-compiler works.
  25717. +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  25718. +  # <limits.h> exists even on freestanding compilers.
  25719.    # On the NeXT, cc -E runs the code through the compiler's parser,
  25720. -  # not just through cpp.
  25721. -  cat > conftest.$ac_ext <<EOF
  25722. -#line 1666 "configure"
  25723. -#include "confdefs.h"
  25724. -#include <assert.h>
  25725. -Syntax Error
  25726. -EOF
  25727. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  25728. -{ (eval echo configure:1672: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  25729. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  25730. -if test -z "$ac_err"; then
  25731. -  :
  25732. -else
  25733. -  echo "$ac_err" >&5
  25734. -  echo "configure: failed program was:" >&5
  25735. -  cat conftest.$ac_ext >&5
  25736. -  rm -rf conftest*
  25737. -  CPP="${CC-cc} -E -traditional-cpp"
  25738. -  cat > conftest.$ac_ext <<EOF
  25739. -#line 1683 "configure"
  25740. -#include "confdefs.h"
  25741. -#include <assert.h>
  25742. -Syntax Error
  25743. -EOF
  25744. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  25745. -{ (eval echo configure:1689: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  25746. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  25747. -if test -z "$ac_err"; then
  25748. -  :
  25749. +  # not just through cpp. "Syntax error" is here to catch this case.
  25750. +  cat >conftest.$ac_ext <<_ACEOF
  25751. +#line $LINENO "configure"
  25752. +/* confdefs.h.  */
  25753. +_ACEOF
  25754. +cat confdefs.h >>conftest.$ac_ext
  25755. +cat >>conftest.$ac_ext <<_ACEOF
  25756. +/* end confdefs.h.  */
  25757. +#ifdef __STDC__
  25758. +# include <limits.h>
  25759. +#else
  25760. +# include <assert.h>
  25761. +#endif
  25762. +                     Syntax error
  25763. +_ACEOF
  25764. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  25765. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  25766. +  ac_status=$?
  25767. +  grep -v '^ *+' conftest.er1 >conftest.err
  25768. +  rm -f conftest.er1
  25769. +  cat conftest.err >&5
  25770. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25771. +  (exit $ac_status); } >/dev/null; then
  25772. +  if test -s conftest.err; then
  25773. +    ac_cpp_err=$ac_c_preproc_warn_flag
  25774. +  else
  25775. +    ac_cpp_err=
  25776. +  fi
  25777.  else
  25778. -  echo "$ac_err" >&5
  25779. -  echo "configure: failed program was:" >&5
  25780. -  cat conftest.$ac_ext >&5
  25781. -  rm -rf conftest*
  25782. -  CPP="${CC-cc} -nologo -E"
  25783. -  cat > conftest.$ac_ext <<EOF
  25784. -#line 1700 "configure"
  25785. -#include "confdefs.h"
  25786. -#include <assert.h>
  25787. -Syntax Error
  25788. -EOF
  25789. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  25790. -{ (eval echo configure:1706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  25791. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  25792. -if test -z "$ac_err"; then
  25793. +  ac_cpp_err=yes
  25794. +fi
  25795. +if test -z "$ac_cpp_err"; then
  25796.    :
  25797.  else
  25798. -  echo "$ac_err" >&5
  25799. -  echo "configure: failed program was:" >&5
  25800. -  cat conftest.$ac_ext >&5
  25801. -  rm -rf conftest*
  25802. -  CPP=/lib/cpp
  25803. +  echo "$as_me: failed program was:" >&5
  25804. +sed 's/^/| /' conftest.$ac_ext >&5
  25805. +
  25806. +  # Broken: fails on valid input.
  25807. +continue
  25808.  fi
  25809. -rm -f conftest*
  25810. +rm -f conftest.err conftest.$ac_ext
  25811. +
  25812. +  # OK, works on sane cases.  Now check whether non-existent headers
  25813. +  # can be detected and how.
  25814. +  cat >conftest.$ac_ext <<_ACEOF
  25815. +#line $LINENO "configure"
  25816. +/* confdefs.h.  */
  25817. +_ACEOF
  25818. +cat confdefs.h >>conftest.$ac_ext
  25819. +cat >>conftest.$ac_ext <<_ACEOF
  25820. +/* end confdefs.h.  */
  25821. +#include <ac_nonexistent.h>
  25822. +_ACEOF
  25823. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  25824. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  25825. +  ac_status=$?
  25826. +  grep -v '^ *+' conftest.er1 >conftest.err
  25827. +  rm -f conftest.er1
  25828. +  cat conftest.err >&5
  25829. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25830. +  (exit $ac_status); } >/dev/null; then
  25831. +  if test -s conftest.err; then
  25832. +    ac_cpp_err=$ac_c_preproc_warn_flag
  25833. +  else
  25834. +    ac_cpp_err=
  25835. +  fi
  25836. +else
  25837. +  ac_cpp_err=yes
  25838. +fi
  25839. +if test -z "$ac_cpp_err"; then
  25840. +  # Broken: success on invalid input.
  25841. +continue
  25842. +else
  25843. +  echo "$as_me: failed program was:" >&5
  25844. +sed 's/^/| /' conftest.$ac_ext >&5
  25845. +
  25846. +  # Passes both tests.
  25847. +ac_preproc_ok=:
  25848. +break
  25849.  fi
  25850. -rm -f conftest*
  25851. +rm -f conftest.err conftest.$ac_ext
  25852. +
  25853. +done
  25854. +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  25855. +rm -f conftest.err conftest.$ac_ext
  25856. +if $ac_preproc_ok; then
  25857. +  break
  25858.  fi
  25859. -rm -f conftest*
  25860. -  ac_cv_prog_CPP="$CPP"
  25861. +
  25862. +    done
  25863. +    ac_cv_prog_CPP=$CPP
  25864. +
  25865. +fi
  25866. +  CPP=$ac_cv_prog_CPP
  25867. +else
  25868. +  ac_cv_prog_CPP=$CPP
  25869. +fi
  25870. +echo "$as_me:$LINENO: result: $CPP" >&5
  25871. +echo "${ECHO_T}$CPP" >&6
  25872. +ac_preproc_ok=false
  25873. +for ac_c_preproc_warn_flag in '' yes
  25874. +do
  25875. +  # Use a header file that comes with gcc, so configuring glibc
  25876. +  # with a fresh cross-compiler works.
  25877. +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  25878. +  # <limits.h> exists even on freestanding compilers.
  25879. +  # On the NeXT, cc -E runs the code through the compiler's parser,
  25880. +  # not just through cpp. "Syntax error" is here to catch this case.
  25881. +  cat >conftest.$ac_ext <<_ACEOF
  25882. +#line $LINENO "configure"
  25883. +/* confdefs.h.  */
  25884. +_ACEOF
  25885. +cat confdefs.h >>conftest.$ac_ext
  25886. +cat >>conftest.$ac_ext <<_ACEOF
  25887. +/* end confdefs.h.  */
  25888. +#ifdef __STDC__
  25889. +# include <limits.h>
  25890. +#else
  25891. +# include <assert.h>
  25892. +#endif
  25893. +                     Syntax error
  25894. +_ACEOF
  25895. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  25896. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  25897. +  ac_status=$?
  25898. +  grep -v '^ *+' conftest.er1 >conftest.err
  25899. +  rm -f conftest.er1
  25900. +  cat conftest.err >&5
  25901. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25902. +  (exit $ac_status); } >/dev/null; then
  25903. +  if test -s conftest.err; then
  25904. +    ac_cpp_err=$ac_c_preproc_warn_flag
  25905. +  else
  25906. +    ac_cpp_err=
  25907. +  fi
  25908. +else
  25909. +  ac_cpp_err=yes
  25910.  fi
  25911. -  CPP="$ac_cv_prog_CPP"
  25912. +if test -z "$ac_cpp_err"; then
  25913. +  :
  25914.  else
  25915. -  ac_cv_prog_CPP="$CPP"
  25916. +  echo "$as_me: failed program was:" >&5
  25917. +sed 's/^/| /' conftest.$ac_ext >&5
  25918. +
  25919. +  # Broken: fails on valid input.
  25920. +continue
  25921.  fi
  25922. -echo "$ac_t""$CPP" 1>&6
  25923. +rm -f conftest.err conftest.$ac_ext
  25924.  
  25925. -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
  25926. -echo "configure:1731: checking for ANSI C header files" >&5
  25927. -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
  25928. -  echo $ac_n "(cached) $ac_c" 1>&6
  25929. +  # OK, works on sane cases.  Now check whether non-existent headers
  25930. +  # can be detected and how.
  25931. +  cat >conftest.$ac_ext <<_ACEOF
  25932. +#line $LINENO "configure"
  25933. +/* confdefs.h.  */
  25934. +_ACEOF
  25935. +cat confdefs.h >>conftest.$ac_ext
  25936. +cat >>conftest.$ac_ext <<_ACEOF
  25937. +/* end confdefs.h.  */
  25938. +#include <ac_nonexistent.h>
  25939. +_ACEOF
  25940. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  25941. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  25942. +  ac_status=$?
  25943. +  grep -v '^ *+' conftest.er1 >conftest.err
  25944. +  rm -f conftest.er1
  25945. +  cat conftest.err >&5
  25946. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  25947. +  (exit $ac_status); } >/dev/null; then
  25948. +  if test -s conftest.err; then
  25949. +    ac_cpp_err=$ac_c_preproc_warn_flag
  25950. +  else
  25951. +    ac_cpp_err=
  25952. +  fi
  25953. +else
  25954. +  ac_cpp_err=yes
  25955. +fi
  25956. +if test -z "$ac_cpp_err"; then
  25957. +  # Broken: success on invalid input.
  25958. +continue
  25959. +else
  25960. +  echo "$as_me: failed program was:" >&5
  25961. +sed 's/^/| /' conftest.$ac_ext >&5
  25962. +
  25963. +  # Passes both tests.
  25964. +ac_preproc_ok=:
  25965. +break
  25966. +fi
  25967. +rm -f conftest.err conftest.$ac_ext
  25968. +
  25969. +done
  25970. +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
  25971. +rm -f conftest.err conftest.$ac_ext
  25972. +if $ac_preproc_ok; then
  25973. +  :
  25974.  else
  25975. -  cat > conftest.$ac_ext <<EOF
  25976. -#line 1736 "configure"
  25977. -#include "confdefs.h"
  25978. +  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
  25979. +See \`config.log' for more details." >&5
  25980. +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
  25981. +See \`config.log' for more details." >&2;}
  25982. +   { (exit 1); exit 1; }; }
  25983. +fi
  25984. +
  25985. +ac_ext=c
  25986. +ac_cpp='$CPP $CPPFLAGS'
  25987. +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
  25988. +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  25989. +ac_compiler_gnu=$ac_cv_c_compiler_gnu
  25990. +
  25991. +
  25992. +echo "$as_me:$LINENO: checking for egrep" >&5
  25993. +echo $ECHO_N "checking for egrep... $ECHO_C" >&6
  25994. +if test "${ac_cv_prog_egrep+set}" = set; then
  25995. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  25996. +else
  25997. +  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
  25998. +    then ac_cv_prog_egrep='grep -E'
  25999. +    else ac_cv_prog_egrep='egrep'
  26000. +    fi
  26001. +fi
  26002. +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
  26003. +echo "${ECHO_T}$ac_cv_prog_egrep" >&6
  26004. + EGREP=$ac_cv_prog_egrep
  26005. +
  26006. +
  26007. +echo "$as_me:$LINENO: checking for ANSI C header files" >&5
  26008. +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
  26009. +if test "${ac_cv_header_stdc+set}" = set; then
  26010. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26011. +else
  26012. +  cat >conftest.$ac_ext <<_ACEOF
  26013. +#line $LINENO "configure"
  26014. +/* confdefs.h.  */
  26015. +_ACEOF
  26016. +cat confdefs.h >>conftest.$ac_ext
  26017. +cat >>conftest.$ac_ext <<_ACEOF
  26018. +/* end confdefs.h.  */
  26019.  #include <stdlib.h>
  26020.  #include <stdarg.h>
  26021.  #include <string.h>
  26022.  #include <float.h>
  26023. -EOF
  26024. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  26025. -{ (eval echo configure:1744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  26026. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  26027. -if test -z "$ac_err"; then
  26028. -  rm -rf conftest*
  26029. +
  26030. +int
  26031. +main ()
  26032. +{
  26033. +
  26034. +  ;
  26035. +  return 0;
  26036. +}
  26037. +_ACEOF
  26038. +rm -f conftest.$ac_objext
  26039. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26040. +  (eval $ac_compile) 2>&5
  26041. +  ac_status=$?
  26042. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26043. +  (exit $ac_status); } &&
  26044. +         { ac_try='test -s conftest.$ac_objext'
  26045. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26046. +  (eval $ac_try) 2>&5
  26047. +  ac_status=$?
  26048. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26049. +  (exit $ac_status); }; }; then
  26050.    ac_cv_header_stdc=yes
  26051.  else
  26052. -  echo "$ac_err" >&5
  26053. -  echo "configure: failed program was:" >&5
  26054. -  cat conftest.$ac_ext >&5
  26055. -  rm -rf conftest*
  26056. -  ac_cv_header_stdc=no
  26057. +  echo "$as_me: failed program was:" >&5
  26058. +sed 's/^/| /' conftest.$ac_ext >&5
  26059. +
  26060. +ac_cv_header_stdc=no
  26061.  fi
  26062. -rm -f conftest*
  26063. +rm -f conftest.$ac_objext conftest.$ac_ext
  26064.  
  26065.  if test $ac_cv_header_stdc = yes; then
  26066.    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  26067. -cat > conftest.$ac_ext <<EOF
  26068. -#line 1761 "configure"
  26069. -#include "confdefs.h"
  26070. +  cat >conftest.$ac_ext <<_ACEOF
  26071. +#line $LINENO "configure"
  26072. +/* confdefs.h.  */
  26073. +_ACEOF
  26074. +cat confdefs.h >>conftest.$ac_ext
  26075. +cat >>conftest.$ac_ext <<_ACEOF
  26076. +/* end confdefs.h.  */
  26077.  #include <string.h>
  26078. -EOF
  26079. +
  26080. +_ACEOF
  26081.  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  26082. -  egrep "memchr" >/dev/null 2>&1; then
  26083. +  $EGREP "memchr" >/dev/null 2>&1; then
  26084.    :
  26085.  else
  26086. -  rm -rf conftest*
  26087.    ac_cv_header_stdc=no
  26088.  fi
  26089.  rm -f conftest*
  26090. @@ -1774,16 +3600,20 @@
  26091.  
  26092.  if test $ac_cv_header_stdc = yes; then
  26093.    # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  26094. -cat > conftest.$ac_ext <<EOF
  26095. -#line 1779 "configure"
  26096. -#include "confdefs.h"
  26097. +  cat >conftest.$ac_ext <<_ACEOF
  26098. +#line $LINENO "configure"
  26099. +/* confdefs.h.  */
  26100. +_ACEOF
  26101. +cat confdefs.h >>conftest.$ac_ext
  26102. +cat >>conftest.$ac_ext <<_ACEOF
  26103. +/* end confdefs.h.  */
  26104.  #include <stdlib.h>
  26105. -EOF
  26106. +
  26107. +_ACEOF
  26108.  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  26109. -  egrep "free" >/dev/null 2>&1; then
  26110. +  $EGREP "free" >/dev/null 2>&1; then
  26111.    :
  26112.  else
  26113. -  rm -rf conftest*
  26114.    ac_cv_header_stdc=no
  26115.  fi
  26116.  rm -f conftest*
  26117. @@ -1792,367 +3622,883 @@
  26118.  
  26119.  if test $ac_cv_header_stdc = yes; then
  26120.    # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  26121. -if test "$cross_compiling" = yes; then
  26122. +  if test "$cross_compiling" = yes; then
  26123.    :
  26124.  else
  26125. -  cat > conftest.$ac_ext <<EOF
  26126. -#line 1800 "configure"
  26127. -#include "confdefs.h"
  26128. +  cat >conftest.$ac_ext <<_ACEOF
  26129. +#line $LINENO "configure"
  26130. +/* confdefs.h.  */
  26131. +_ACEOF
  26132. +cat confdefs.h >>conftest.$ac_ext
  26133. +cat >>conftest.$ac_ext <<_ACEOF
  26134. +/* end confdefs.h.  */
  26135.  #include <ctype.h>
  26136. -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  26137. -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  26138. -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
  26139. -int main () { int i; for (i = 0; i < 256; i++)
  26140. -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
  26141. -exit (0); }
  26142. +#if ((' ' & 0x0FF) == 0x020)
  26143. +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  26144. +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  26145. +#else
  26146. +# define ISLOWER(c) \
  26147. +                   (('a' <= (c) && (c) <= 'i') \
  26148. +                     || ('j' <= (c) && (c) <= 'r') \
  26149. +                     || ('s' <= (c) && (c) <= 'z'))
  26150. +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
  26151. +#endif
  26152.  
  26153. -EOF
  26154. -if { (eval echo configure:1811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  26155. -then
  26156. +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
  26157. +int
  26158. +main ()
  26159. +{
  26160. +  int i;
  26161. +  for (i = 0; i < 256; i++)
  26162. +    if (XOR (islower (i), ISLOWER (i))
  26163. +        || toupper (i) != TOUPPER (i))
  26164. +      exit(2);
  26165. +  exit (0);
  26166. +}
  26167. +_ACEOF
  26168. +rm -f conftest$ac_exeext
  26169. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  26170. +  (eval $ac_link) 2>&5
  26171. +  ac_status=$?
  26172. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26173. +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  26174. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26175. +  (eval $ac_try) 2>&5
  26176. +  ac_status=$?
  26177. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26178. +  (exit $ac_status); }; }; then
  26179.    :
  26180.  else
  26181. -  echo "configure: failed program was:" >&5
  26182. -  cat conftest.$ac_ext >&5
  26183. -  rm -fr conftest*
  26184. -  ac_cv_header_stdc=no
  26185. +  echo "$as_me: program exited with status $ac_status" >&5
  26186. +echo "$as_me: failed program was:" >&5
  26187. +sed 's/^/| /' conftest.$ac_ext >&5
  26188. +
  26189. +( exit $ac_status )
  26190. +ac_cv_header_stdc=no
  26191.  fi
  26192. -rm -fr conftest*
  26193. +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  26194.  fi
  26195. -
  26196.  fi
  26197.  fi
  26198. -
  26199. -echo "$ac_t""$ac_cv_header_stdc" 1>&6
  26200. +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
  26201. +echo "${ECHO_T}$ac_cv_header_stdc" >&6
  26202.  if test $ac_cv_header_stdc = yes; then
  26203. -  cat >> confdefs.h <<\EOF
  26204. +
  26205. +cat >>confdefs.h <<\_ACEOF
  26206.  #define STDC_HEADERS 1
  26207. -EOF
  26208. +_ACEOF
  26209.  
  26210.  fi
  26211.  
  26212. -echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
  26213. -echo "configure:1835: checking whether time.h and sys/time.h may both be included" >&5
  26214. -if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
  26215. -  echo $ac_n "(cached) $ac_c" 1>&6
  26216. -else
  26217. -  cat > conftest.$ac_ext <<EOF
  26218. -#line 1840 "configure"
  26219. -#include "confdefs.h"
  26220. +echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
  26221. +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
  26222. +if test "${ac_cv_header_time+set}" = set; then
  26223. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26224. +else
  26225. +  cat >conftest.$ac_ext <<_ACEOF
  26226. +#line $LINENO "configure"
  26227. +/* confdefs.h.  */
  26228. +_ACEOF
  26229. +cat confdefs.h >>conftest.$ac_ext
  26230. +cat >>conftest.$ac_ext <<_ACEOF
  26231. +/* end confdefs.h.  */
  26232.  #include <sys/types.h>
  26233.  #include <sys/time.h>
  26234.  #include <time.h>
  26235. -int main() {
  26236. -struct tm *tp;
  26237. -; return 0; }
  26238. -EOF
  26239. -if { (eval echo configure:1849: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  26240. -  rm -rf conftest*
  26241. +
  26242. +int
  26243. +main ()
  26244. +{
  26245. +if ((struct tm *) 0)
  26246. +return 0;
  26247. +  ;
  26248. +  return 0;
  26249. +}
  26250. +_ACEOF
  26251. +rm -f conftest.$ac_objext
  26252. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26253. +  (eval $ac_compile) 2>&5
  26254. +  ac_status=$?
  26255. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26256. +  (exit $ac_status); } &&
  26257. +         { ac_try='test -s conftest.$ac_objext'
  26258. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26259. +  (eval $ac_try) 2>&5
  26260. +  ac_status=$?
  26261. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26262. +  (exit $ac_status); }; }; then
  26263.    ac_cv_header_time=yes
  26264.  else
  26265. -  echo "configure: failed program was:" >&5
  26266. -  cat conftest.$ac_ext >&5
  26267. -  rm -rf conftest*
  26268. -  ac_cv_header_time=no
  26269. +  echo "$as_me: failed program was:" >&5
  26270. +sed 's/^/| /' conftest.$ac_ext >&5
  26271. +
  26272. +ac_cv_header_time=no
  26273.  fi
  26274. -rm -f conftest*
  26275. +rm -f conftest.$ac_objext conftest.$ac_ext
  26276.  fi
  26277. -
  26278. -echo "$ac_t""$ac_cv_header_time" 1>&6
  26279. +echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
  26280. +echo "${ECHO_T}$ac_cv_header_time" >&6
  26281.  if test $ac_cv_header_time = yes; then
  26282. -  cat >> confdefs.h <<\EOF
  26283. +
  26284. +cat >>confdefs.h <<\_ACEOF
  26285.  #define TIME_WITH_SYS_TIME 1
  26286. -EOF
  26287. +_ACEOF
  26288.  
  26289.  fi
  26290.  
  26291. -echo $ac_n "checking whether string.h and strings.h may both be included""... $ac_c" 1>&6
  26292. -echo "configure:1870: checking whether string.h and strings.h may both be included" >&5
  26293. -if eval "test \"`echo '$''{'gcc_cv_header_string'+set}'`\" = set"; then
  26294. -  echo $ac_n "(cached) $ac_c" 1>&6
  26295. -else
  26296. -  cat > conftest.$ac_ext <<EOF
  26297. -#line 1875 "configure"
  26298. -#include "confdefs.h"
  26299. +echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5
  26300. +echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6
  26301. +if test "${gcc_cv_header_string+set}" = set; then
  26302. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26303. +else
  26304. +  cat >conftest.$ac_ext <<_ACEOF
  26305. +#line $LINENO "configure"
  26306. +/* confdefs.h.  */
  26307. +_ACEOF
  26308. +cat confdefs.h >>conftest.$ac_ext
  26309. +cat >>conftest.$ac_ext <<_ACEOF
  26310. +/* end confdefs.h.  */
  26311.  #include <string.h>
  26312.  #include <strings.h>
  26313. -int main() {
  26314. +int
  26315. +main ()
  26316. +{
  26317.  
  26318. -; return 0; }
  26319. -EOF
  26320. -if { (eval echo configure:1883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  26321. -  rm -rf conftest*
  26322. +  ;
  26323. +  return 0;
  26324. +}
  26325. +_ACEOF
  26326. +rm -f conftest.$ac_objext
  26327. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26328. +  (eval $ac_compile) 2>&5
  26329. +  ac_status=$?
  26330. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26331. +  (exit $ac_status); } &&
  26332. +         { ac_try='test -s conftest.$ac_objext'
  26333. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26334. +  (eval $ac_try) 2>&5
  26335. +  ac_status=$?
  26336. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26337. +  (exit $ac_status); }; }; then
  26338.    gcc_cv_header_string=yes
  26339.  else
  26340. -  echo "configure: failed program was:" >&5
  26341. -  cat conftest.$ac_ext >&5
  26342. -  rm -rf conftest*
  26343. -  gcc_cv_header_string=no
  26344. +  echo "$as_me: failed program was:" >&5
  26345. +sed 's/^/| /' conftest.$ac_ext >&5
  26346. +
  26347. +gcc_cv_header_string=no
  26348.  fi
  26349. -rm -f conftest*
  26350. +rm -f conftest.$ac_objext conftest.$ac_ext
  26351.  fi
  26352. -
  26353. -echo "$ac_t""$gcc_cv_header_string" 1>&6
  26354. +echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5
  26355. +echo "${ECHO_T}$gcc_cv_header_string" >&6
  26356.  if test $gcc_cv_header_string = yes; then
  26357. -  cat >> confdefs.h <<\EOF
  26358. +  cat >>confdefs.h <<\_ACEOF
  26359.  #define STRING_WITH_STRINGS 1
  26360. -EOF
  26361. +_ACEOF
  26362.  
  26363.  fi
  26364.  
  26365. -echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
  26366. -echo "configure:1904: checking for sys/wait.h that is POSIX.1 compatible" >&5
  26367. -if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
  26368. -  echo $ac_n "(cached) $ac_c" 1>&6
  26369. -else
  26370. -  cat > conftest.$ac_ext <<EOF
  26371. -#line 1909 "configure"
  26372. -#include "confdefs.h"
  26373. +echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
  26374. +echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
  26375. +if test "${ac_cv_header_sys_wait_h+set}" = set; then
  26376. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26377. +else
  26378. +  cat >conftest.$ac_ext <<_ACEOF
  26379. +#line $LINENO "configure"
  26380. +/* confdefs.h.  */
  26381. +_ACEOF
  26382. +cat confdefs.h >>conftest.$ac_ext
  26383. +cat >>conftest.$ac_ext <<_ACEOF
  26384. +/* end confdefs.h.  */
  26385.  #include <sys/types.h>
  26386.  #include <sys/wait.h>
  26387.  #ifndef WEXITSTATUS
  26388. -#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
  26389. +# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
  26390.  #endif
  26391.  #ifndef WIFEXITED
  26392. -#define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
  26393. +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
  26394.  #endif
  26395. -int main() {
  26396. -int s;
  26397. -wait (&s);
  26398. -s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
  26399. -; return 0; }
  26400. -EOF
  26401. -if { (eval echo configure:1925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  26402. -  rm -rf conftest*
  26403. -  ac_cv_header_sys_wait_h=yes
  26404. +
  26405. +int
  26406. +main ()
  26407. +{
  26408. +  int s;
  26409. +  wait (&s);
  26410. +  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
  26411. +  ;
  26412. +  return 0;
  26413. +}
  26414. +_ACEOF
  26415. +rm -f conftest.$ac_objext
  26416. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26417. +  (eval $ac_compile) 2>&5
  26418. +  ac_status=$?
  26419. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26420. +  (exit $ac_status); } &&
  26421. +         { ac_try='test -s conftest.$ac_objext'
  26422. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26423. +  (eval $ac_try) 2>&5
  26424. +  ac_status=$?
  26425. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26426. +  (exit $ac_status); }; }; then
  26427. +  ac_cv_header_sys_wait_h=yes
  26428.  else
  26429. -  echo "configure: failed program was:" >&5
  26430. -  cat conftest.$ac_ext >&5
  26431. -  rm -rf conftest*
  26432. -  ac_cv_header_sys_wait_h=no
  26433. +  echo "$as_me: failed program was:" >&5
  26434. +sed 's/^/| /' conftest.$ac_ext >&5
  26435. +
  26436. +ac_cv_header_sys_wait_h=no
  26437.  fi
  26438. -rm -f conftest*
  26439. +rm -f conftest.$ac_objext conftest.$ac_ext
  26440.  fi
  26441. -
  26442. -echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6
  26443. +echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
  26444. +echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
  26445.  if test $ac_cv_header_sys_wait_h = yes; then
  26446. -  cat >> confdefs.h <<\EOF
  26447. +
  26448. +cat >>confdefs.h <<\_ACEOF
  26449.  #define HAVE_SYS_WAIT_H 1
  26450. -EOF
  26451. +_ACEOF
  26452.  
  26453.  fi
  26454.  
  26455. -for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h stab.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h sys/stat.h direct.h
  26456. +# On IRIX 5.3, sys/types and inttypes.h are conflicting.
  26457. +
  26458. +
  26459. +
  26460. +
  26461. +
  26462. +
  26463. +
  26464. +
  26465. +
  26466. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
  26467. +                  inttypes.h stdint.h unistd.h
  26468.  do
  26469. -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  26470. -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  26471. -echo "configure:1949: checking for $ac_hdr" >&5
  26472. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  26473. -  echo $ac_n "(cached) $ac_c" 1>&6
  26474. -else
  26475. -  cat > conftest.$ac_ext <<EOF
  26476. -#line 1954 "configure"
  26477. -#include "confdefs.h"
  26478. -#include <$ac_hdr>
  26479. -EOF
  26480. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  26481. -{ (eval echo configure:1959: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  26482. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  26483. -if test -z "$ac_err"; then
  26484. -  rm -rf conftest*
  26485. -  eval "ac_cv_header_$ac_safe=yes"
  26486. -else
  26487. -  echo "$ac_err" >&5
  26488. -  echo "configure: failed program was:" >&5
  26489. -  cat conftest.$ac_ext >&5
  26490. -  rm -rf conftest*
  26491. -  eval "ac_cv_header_$ac_safe=no"
  26492. -fi
  26493. -rm -f conftest*
  26494. +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  26495. +echo "$as_me:$LINENO: checking for $ac_header" >&5
  26496. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  26497. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  26498. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26499. +else
  26500. +  cat >conftest.$ac_ext <<_ACEOF
  26501. +#line $LINENO "configure"
  26502. +/* confdefs.h.  */
  26503. +_ACEOF
  26504. +cat confdefs.h >>conftest.$ac_ext
  26505. +cat >>conftest.$ac_ext <<_ACEOF
  26506. +/* end confdefs.h.  */
  26507. +$ac_includes_default
  26508. +
  26509. +#include <$ac_header>
  26510. +_ACEOF
  26511. +rm -f conftest.$ac_objext
  26512. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26513. +  (eval $ac_compile) 2>&5
  26514. +  ac_status=$?
  26515. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26516. +  (exit $ac_status); } &&
  26517. +         { ac_try='test -s conftest.$ac_objext'
  26518. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26519. +  (eval $ac_try) 2>&5
  26520. +  ac_status=$?
  26521. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26522. +  (exit $ac_status); }; }; then
  26523. +  eval "$as_ac_Header=yes"
  26524. +else
  26525. +  echo "$as_me: failed program was:" >&5
  26526. +sed 's/^/| /' conftest.$ac_ext >&5
  26527. +
  26528. +eval "$as_ac_Header=no"
  26529. +fi
  26530. +rm -f conftest.$ac_objext conftest.$ac_ext
  26531. +fi
  26532. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  26533. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  26534. +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  26535. +  cat >>confdefs.h <<_ACEOF
  26536. +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  26537. +_ACEOF
  26538. +
  26539.  fi
  26540. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  26541. -  echo "$ac_t""yes" 1>&6
  26542. -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  26543. -  cat >> confdefs.h <<EOF
  26544. -#define $ac_tr_hdr 1
  26545. -EOF
  26546.   
  26547. +done
  26548. +
  26549. +
  26550. +
  26551. +
  26552. +
  26553. +
  26554. +
  26555. +
  26556. +
  26557. +
  26558. +
  26559. +
  26560. +
  26561. +
  26562. +
  26563. +
  26564. +
  26565. +
  26566. +for ac_header in limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h stab.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h sys/stat.h direct.h
  26567. +do
  26568. +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  26569. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  26570. +  echo "$as_me:$LINENO: checking for $ac_header" >&5
  26571. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  26572. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  26573. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26574. +fi
  26575. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  26576. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  26577. +else
  26578. +  # Is the header compilable?
  26579. +echo "$as_me:$LINENO: checking $ac_header usability" >&5
  26580. +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  26581. +cat >conftest.$ac_ext <<_ACEOF
  26582. +#line $LINENO "configure"
  26583. +/* confdefs.h.  */
  26584. +_ACEOF
  26585. +cat confdefs.h >>conftest.$ac_ext
  26586. +cat >>conftest.$ac_ext <<_ACEOF
  26587. +/* end confdefs.h.  */
  26588. +$ac_includes_default
  26589. +#include <$ac_header>
  26590. +_ACEOF
  26591. +rm -f conftest.$ac_objext
  26592. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26593. +  (eval $ac_compile) 2>&5
  26594. +  ac_status=$?
  26595. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26596. +  (exit $ac_status); } &&
  26597. +         { ac_try='test -s conftest.$ac_objext'
  26598. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26599. +  (eval $ac_try) 2>&5
  26600. +  ac_status=$?
  26601. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26602. +  (exit $ac_status); }; }; then
  26603. +  ac_header_compiler=yes
  26604. +else
  26605. +  echo "$as_me: failed program was:" >&5
  26606. +sed 's/^/| /' conftest.$ac_ext >&5
  26607. +
  26608. +ac_header_compiler=no
  26609. +fi
  26610. +rm -f conftest.$ac_objext conftest.$ac_ext
  26611. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  26612. +echo "${ECHO_T}$ac_header_compiler" >&6
  26613. +
  26614. +# Is the header present?
  26615. +echo "$as_me:$LINENO: checking $ac_header presence" >&5
  26616. +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  26617. +cat >conftest.$ac_ext <<_ACEOF
  26618. +#line $LINENO "configure"
  26619. +/* confdefs.h.  */
  26620. +_ACEOF
  26621. +cat confdefs.h >>conftest.$ac_ext
  26622. +cat >>conftest.$ac_ext <<_ACEOF
  26623. +/* end confdefs.h.  */
  26624. +#include <$ac_header>
  26625. +_ACEOF
  26626. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  26627. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  26628. +  ac_status=$?
  26629. +  grep -v '^ *+' conftest.er1 >conftest.err
  26630. +  rm -f conftest.er1
  26631. +  cat conftest.err >&5
  26632. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26633. +  (exit $ac_status); } >/dev/null; then
  26634. +  if test -s conftest.err; then
  26635. +    ac_cpp_err=$ac_c_preproc_warn_flag
  26636. +  else
  26637. +    ac_cpp_err=
  26638. +  fi
  26639. +else
  26640. +  ac_cpp_err=yes
  26641. +fi
  26642. +if test -z "$ac_cpp_err"; then
  26643. +  ac_header_preproc=yes
  26644. +else
  26645. +  echo "$as_me: failed program was:" >&5
  26646. +sed 's/^/| /' conftest.$ac_ext >&5
  26647. +
  26648. +  ac_header_preproc=no
  26649. +fi
  26650. +rm -f conftest.err conftest.$ac_ext
  26651. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  26652. +echo "${ECHO_T}$ac_header_preproc" >&6
  26653. +
  26654. +# So?  What about this header?
  26655. +case $ac_header_compiler:$ac_header_preproc in
  26656. +  yes:no )
  26657. +    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  26658. +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
  26659. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  26660. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  26661. +    (
  26662. +      cat <<\_ASBOX
  26663. +## ------------------------------------ ##
  26664. +## Report this to bug-autoconf@gnu.org. ##
  26665. +## ------------------------------------ ##
  26666. +_ASBOX
  26667. +    ) |
  26668. +      sed "s/^/$as_me: WARNING:     /" >&2
  26669. +    ;;
  26670. +  no:yes )
  26671. +    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  26672. +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
  26673. +    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
  26674. +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
  26675. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  26676. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  26677. +    (
  26678. +      cat <<\_ASBOX
  26679. +## ------------------------------------ ##
  26680. +## Report this to bug-autoconf@gnu.org. ##
  26681. +## ------------------------------------ ##
  26682. +_ASBOX
  26683. +    ) |
  26684. +      sed "s/^/$as_me: WARNING:     /" >&2
  26685. +    ;;
  26686. +esac
  26687. +echo "$as_me:$LINENO: checking for $ac_header" >&5
  26688. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  26689. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  26690. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26691.  else
  26692. -  echo "$ac_t""no" 1>&6
  26693. +  eval "$as_ac_Header=$ac_header_preproc"
  26694.  fi
  26695. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  26696. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  26697. +
  26698. +fi
  26699. +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  26700. +  cat >>confdefs.h <<_ACEOF
  26701. +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  26702. +_ACEOF
  26703. +
  26704. +fi
  26705. +
  26706.  done
  26707.  
  26708.  
  26709.  # Check for thread headers.
  26710. -ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'`
  26711. -echo $ac_n "checking for thread.h""... $ac_c" 1>&6
  26712. -echo "configure:1989: checking for thread.h" >&5
  26713. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  26714. -  echo $ac_n "(cached) $ac_c" 1>&6
  26715. -else
  26716. -  cat > conftest.$ac_ext <<EOF
  26717. -#line 1994 "configure"
  26718. -#include "confdefs.h"
  26719. +if test "${ac_cv_header_thread_h+set}" = set; then
  26720. +  echo "$as_me:$LINENO: checking for thread.h" >&5
  26721. +echo $ECHO_N "checking for thread.h... $ECHO_C" >&6
  26722. +if test "${ac_cv_header_thread_h+set}" = set; then
  26723. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26724. +fi
  26725. +echo "$as_me:$LINENO: result: $ac_cv_header_thread_h" >&5
  26726. +echo "${ECHO_T}$ac_cv_header_thread_h" >&6
  26727. +else
  26728. +  # Is the header compilable?
  26729. +echo "$as_me:$LINENO: checking thread.h usability" >&5
  26730. +echo $ECHO_N "checking thread.h usability... $ECHO_C" >&6
  26731. +cat >conftest.$ac_ext <<_ACEOF
  26732. +#line $LINENO "configure"
  26733. +/* confdefs.h.  */
  26734. +_ACEOF
  26735. +cat confdefs.h >>conftest.$ac_ext
  26736. +cat >>conftest.$ac_ext <<_ACEOF
  26737. +/* end confdefs.h.  */
  26738. +$ac_includes_default
  26739.  #include <thread.h>
  26740. -EOF
  26741. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  26742. -{ (eval echo configure:1999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  26743. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  26744. -if test -z "$ac_err"; then
  26745. -  rm -rf conftest*
  26746. -  eval "ac_cv_header_$ac_safe=yes"
  26747. -else
  26748. -  echo "$ac_err" >&5
  26749. -  echo "configure: failed program was:" >&5
  26750. -  cat conftest.$ac_ext >&5
  26751. -  rm -rf conftest*
  26752. -  eval "ac_cv_header_$ac_safe=no"
  26753. +_ACEOF
  26754. +rm -f conftest.$ac_objext
  26755. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26756. +  (eval $ac_compile) 2>&5
  26757. +  ac_status=$?
  26758. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26759. +  (exit $ac_status); } &&
  26760. +         { ac_try='test -s conftest.$ac_objext'
  26761. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26762. +  (eval $ac_try) 2>&5
  26763. +  ac_status=$?
  26764. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26765. +  (exit $ac_status); }; }; then
  26766. +  ac_header_compiler=yes
  26767. +else
  26768. +  echo "$as_me: failed program was:" >&5
  26769. +sed 's/^/| /' conftest.$ac_ext >&5
  26770. +
  26771. +ac_header_compiler=no
  26772. +fi
  26773. +rm -f conftest.$ac_objext conftest.$ac_ext
  26774. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  26775. +echo "${ECHO_T}$ac_header_compiler" >&6
  26776. +
  26777. +# Is the header present?
  26778. +echo "$as_me:$LINENO: checking thread.h presence" >&5
  26779. +echo $ECHO_N "checking thread.h presence... $ECHO_C" >&6
  26780. +cat >conftest.$ac_ext <<_ACEOF
  26781. +#line $LINENO "configure"
  26782. +/* confdefs.h.  */
  26783. +_ACEOF
  26784. +cat confdefs.h >>conftest.$ac_ext
  26785. +cat >>conftest.$ac_ext <<_ACEOF
  26786. +/* end confdefs.h.  */
  26787. +#include <thread.h>
  26788. +_ACEOF
  26789. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  26790. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  26791. +  ac_status=$?
  26792. +  grep -v '^ *+' conftest.er1 >conftest.err
  26793. +  rm -f conftest.er1
  26794. +  cat conftest.err >&5
  26795. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26796. +  (exit $ac_status); } >/dev/null; then
  26797. +  if test -s conftest.err; then
  26798. +    ac_cpp_err=$ac_c_preproc_warn_flag
  26799. +  else
  26800. +    ac_cpp_err=
  26801. +  fi
  26802. +else
  26803. +  ac_cpp_err=yes
  26804. +fi
  26805. +if test -z "$ac_cpp_err"; then
  26806. +  ac_header_preproc=yes
  26807. +else
  26808. +  echo "$as_me: failed program was:" >&5
  26809. +sed 's/^/| /' conftest.$ac_ext >&5
  26810. +
  26811. +  ac_header_preproc=no
  26812. +fi
  26813. +rm -f conftest.err conftest.$ac_ext
  26814. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  26815. +echo "${ECHO_T}$ac_header_preproc" >&6
  26816. +
  26817. +# So?  What about this header?
  26818. +case $ac_header_compiler:$ac_header_preproc in
  26819. +  yes:no )
  26820. +    { echo "$as_me:$LINENO: WARNING: thread.h: accepted by the compiler, rejected by the preprocessor!" >&5
  26821. +echo "$as_me: WARNING: thread.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
  26822. +    { echo "$as_me:$LINENO: WARNING: thread.h: proceeding with the preprocessor's result" >&5
  26823. +echo "$as_me: WARNING: thread.h: proceeding with the preprocessor's result" >&2;}
  26824. +    (
  26825. +      cat <<\_ASBOX
  26826. +## ------------------------------------ ##
  26827. +## Report this to bug-autoconf@gnu.org. ##
  26828. +## ------------------------------------ ##
  26829. +_ASBOX
  26830. +    ) |
  26831. +      sed "s/^/$as_me: WARNING:     /" >&2
  26832. +    ;;
  26833. +  no:yes )
  26834. +    { echo "$as_me:$LINENO: WARNING: thread.h: present but cannot be compiled" >&5
  26835. +echo "$as_me: WARNING: thread.h: present but cannot be compiled" >&2;}
  26836. +    { echo "$as_me:$LINENO: WARNING: thread.h: check for missing prerequisite headers?" >&5
  26837. +echo "$as_me: WARNING: thread.h: check for missing prerequisite headers?" >&2;}
  26838. +    { echo "$as_me:$LINENO: WARNING: thread.h: proceeding with the preprocessor's result" >&5
  26839. +echo "$as_me: WARNING: thread.h: proceeding with the preprocessor's result" >&2;}
  26840. +    (
  26841. +      cat <<\_ASBOX
  26842. +## ------------------------------------ ##
  26843. +## Report this to bug-autoconf@gnu.org. ##
  26844. +## ------------------------------------ ##
  26845. +_ASBOX
  26846. +    ) |
  26847. +      sed "s/^/$as_me: WARNING:     /" >&2
  26848. +    ;;
  26849. +esac
  26850. +echo "$as_me:$LINENO: checking for thread.h" >&5
  26851. +echo $ECHO_N "checking for thread.h... $ECHO_C" >&6
  26852. +if test "${ac_cv_header_thread_h+set}" = set; then
  26853. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26854. +else
  26855. +  ac_cv_header_thread_h=$ac_header_preproc
  26856.  fi
  26857. -rm -f conftest*
  26858. +echo "$as_me:$LINENO: result: $ac_cv_header_thread_h" >&5
  26859. +echo "${ECHO_T}$ac_cv_header_thread_h" >&6
  26860. +
  26861.  fi
  26862. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  26863. -  echo "$ac_t""yes" 1>&6
  26864. +if test $ac_cv_header_thread_h = yes; then
  26865.    have_thread_h=yes
  26866.  else
  26867. -  echo "$ac_t""no" 1>&6
  26868. -have_thread_h=
  26869. +  have_thread_h=
  26870.  fi
  26871.  
  26872. -ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'`
  26873. -echo $ac_n "checking for pthread.h""... $ac_c" 1>&6
  26874. -echo "configure:2023: checking for pthread.h" >&5
  26875. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  26876. -  echo $ac_n "(cached) $ac_c" 1>&6
  26877. -else
  26878. -  cat > conftest.$ac_ext <<EOF
  26879. -#line 2028 "configure"
  26880. -#include "confdefs.h"
  26881. +
  26882. +if test "${ac_cv_header_pthread_h+set}" = set; then
  26883. +  echo "$as_me:$LINENO: checking for pthread.h" >&5
  26884. +echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
  26885. +if test "${ac_cv_header_pthread_h+set}" = set; then
  26886. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  26887. +fi
  26888. +echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
  26889. +echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
  26890. +else
  26891. +  # Is the header compilable?
  26892. +echo "$as_me:$LINENO: checking pthread.h usability" >&5
  26893. +echo $ECHO_N "checking pthread.h usability... $ECHO_C" >&6
  26894. +cat >conftest.$ac_ext <<_ACEOF
  26895. +#line $LINENO "configure"
  26896. +/* confdefs.h.  */
  26897. +_ACEOF
  26898. +cat confdefs.h >>conftest.$ac_ext
  26899. +cat >>conftest.$ac_ext <<_ACEOF
  26900. +/* end confdefs.h.  */
  26901. +$ac_includes_default
  26902.  #include <pthread.h>
  26903. -EOF
  26904. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  26905. -{ (eval echo configure:2033: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  26906. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  26907. -if test -z "$ac_err"; then
  26908. -  rm -rf conftest*
  26909. -  eval "ac_cv_header_$ac_safe=yes"
  26910. -else
  26911. -  echo "$ac_err" >&5
  26912. -  echo "configure: failed program was:" >&5
  26913. -  cat conftest.$ac_ext >&5
  26914. -  rm -rf conftest*
  26915. -  eval "ac_cv_header_$ac_safe=no"
  26916. +_ACEOF
  26917. +rm -f conftest.$ac_objext
  26918. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  26919. +  (eval $ac_compile) 2>&5
  26920. +  ac_status=$?
  26921. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26922. +  (exit $ac_status); } &&
  26923. +         { ac_try='test -s conftest.$ac_objext'
  26924. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  26925. +  (eval $ac_try) 2>&5
  26926. +  ac_status=$?
  26927. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26928. +  (exit $ac_status); }; }; then
  26929. +  ac_header_compiler=yes
  26930. +else
  26931. +  echo "$as_me: failed program was:" >&5
  26932. +sed 's/^/| /' conftest.$ac_ext >&5
  26933. +
  26934. +ac_header_compiler=no
  26935. +fi
  26936. +rm -f conftest.$ac_objext conftest.$ac_ext
  26937. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  26938. +echo "${ECHO_T}$ac_header_compiler" >&6
  26939. +
  26940. +# Is the header present?
  26941. +echo "$as_me:$LINENO: checking pthread.h presence" >&5
  26942. +echo $ECHO_N "checking pthread.h presence... $ECHO_C" >&6
  26943. +cat >conftest.$ac_ext <<_ACEOF
  26944. +#line $LINENO "configure"
  26945. +/* confdefs.h.  */
  26946. +_ACEOF
  26947. +cat confdefs.h >>conftest.$ac_ext
  26948. +cat >>conftest.$ac_ext <<_ACEOF
  26949. +/* end confdefs.h.  */
  26950. +#include <pthread.h>
  26951. +_ACEOF
  26952. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  26953. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  26954. +  ac_status=$?
  26955. +  grep -v '^ *+' conftest.er1 >conftest.err
  26956. +  rm -f conftest.er1
  26957. +  cat conftest.err >&5
  26958. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  26959. +  (exit $ac_status); } >/dev/null; then
  26960. +  if test -s conftest.err; then
  26961. +    ac_cpp_err=$ac_c_preproc_warn_flag
  26962. +  else
  26963. +    ac_cpp_err=
  26964. +  fi
  26965. +else
  26966. +  ac_cpp_err=yes
  26967. +fi
  26968. +if test -z "$ac_cpp_err"; then
  26969. +  ac_header_preproc=yes
  26970. +else
  26971. +  echo "$as_me: failed program was:" >&5
  26972. +sed 's/^/| /' conftest.$ac_ext >&5
  26973. +
  26974. +  ac_header_preproc=no
  26975. +fi
  26976. +rm -f conftest.err conftest.$ac_ext
  26977. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  26978. +echo "${ECHO_T}$ac_header_preproc" >&6
  26979. +
  26980. +# So?  What about this header?
  26981. +case $ac_header_compiler:$ac_header_preproc in
  26982. +  yes:no )
  26983. +    { echo "$as_me:$LINENO: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&5
  26984. +echo "$as_me: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
  26985. +    { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
  26986. +echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
  26987. +    (
  26988. +      cat <<\_ASBOX
  26989. +## ------------------------------------ ##
  26990. +## Report this to bug-autoconf@gnu.org. ##
  26991. +## ------------------------------------ ##
  26992. +_ASBOX
  26993. +    ) |
  26994. +      sed "s/^/$as_me: WARNING:     /" >&2
  26995. +    ;;
  26996. +  no:yes )
  26997. +    { echo "$as_me:$LINENO: WARNING: pthread.h: present but cannot be compiled" >&5
  26998. +echo "$as_me: WARNING: pthread.h: present but cannot be compiled" >&2;}
  26999. +    { echo "$as_me:$LINENO: WARNING: pthread.h: check for missing prerequisite headers?" >&5
  27000. +echo "$as_me: WARNING: pthread.h: check for missing prerequisite headers?" >&2;}
  27001. +    { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
  27002. +echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
  27003. +    (
  27004. +      cat <<\_ASBOX
  27005. +## ------------------------------------ ##
  27006. +## Report this to bug-autoconf@gnu.org. ##
  27007. +## ------------------------------------ ##
  27008. +_ASBOX
  27009. +    ) |
  27010. +      sed "s/^/$as_me: WARNING:     /" >&2
  27011. +    ;;
  27012. +esac
  27013. +echo "$as_me:$LINENO: checking for pthread.h" >&5
  27014. +echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
  27015. +if test "${ac_cv_header_pthread_h+set}" = set; then
  27016. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27017. +else
  27018. +  ac_cv_header_pthread_h=$ac_header_preproc
  27019.  fi
  27020. -rm -f conftest*
  27021. +echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
  27022. +echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
  27023. +
  27024.  fi
  27025. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  27026. -  echo "$ac_t""yes" 1>&6
  27027. +if test $ac_cv_header_pthread_h = yes; then
  27028.    have_pthread_h=yes
  27029.  else
  27030. -  echo "$ac_t""no" 1>&6
  27031. -have_pthread_h=
  27032. +  have_pthread_h=
  27033.  fi
  27034.  
  27035.  
  27036.  # See if GNAT has been installed
  27037.  # Extract the first word of "gnatbind", so it can be a program name with args.
  27038.  set dummy gnatbind; ac_word=$2
  27039. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  27040. -echo "configure:2060: checking for $ac_word" >&5
  27041. -if eval "test \"`echo '$''{'ac_cv_prog_gnat'+set}'`\" = set"; then
  27042. -  echo $ac_n "(cached) $ac_c" 1>&6
  27043. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  27044. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  27045. +if test "${ac_cv_prog_gnat+set}" = set; then
  27046. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27047.  else
  27048.    if test -n "$gnat"; then
  27049.    ac_cv_prog_gnat="$gnat" # Let the user override the test.
  27050.  else
  27051. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  27052. -  ac_dummy="$PATH"
  27053. -  for ac_dir in $ac_dummy; do
  27054. -    test -z "$ac_dir" && ac_dir=.
  27055. -    if test -f $ac_dir/$ac_word; then
  27056. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  27057. +for as_dir in $PATH
  27058. +do
  27059. +  IFS=$as_save_IFS
  27060. +  test -z "$as_dir" && as_dir=.
  27061. +  for ac_exec_ext in '' $ac_executable_extensions; do
  27062. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  27063.        ac_cv_prog_gnat="yes"
  27064. -      break
  27065. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  27066. +    break 2
  27067.      fi
  27068. -  done
  27069. -  IFS="$ac_save_ifs"
  27070. +done
  27071. +done
  27072. +
  27073.    test -z "$ac_cv_prog_gnat" && ac_cv_prog_gnat="no"
  27074.  fi
  27075.  fi
  27076. -gnat="$ac_cv_prog_gnat"
  27077. +gnat=$ac_cv_prog_gnat
  27078.  if test -n "$gnat"; then
  27079. -  echo "$ac_t""$gnat" 1>&6
  27080. +  echo "$as_me:$LINENO: result: $gnat" >&5
  27081. +echo "${ECHO_T}$gnat" >&6
  27082.  else
  27083. -  echo "$ac_t""no" 1>&6
  27084. +  echo "$as_me:$LINENO: result: no" >&5
  27085. +echo "${ECHO_T}no" >&6
  27086.  fi
  27087.  
  27088.  
  27089.  # See if the system preprocessor understands the ANSI C preprocessor
  27090.  # stringification operator.
  27091. -echo $ac_n "checking whether cpp understands the stringify operator""... $ac_c" 1>&6
  27092. -echo "configure:2091: checking whether cpp understands the stringify operator" >&5
  27093. -if eval "test \"`echo '$''{'gcc_cv_c_have_stringify'+set}'`\" = set"; then
  27094. -  echo $ac_n "(cached) $ac_c" 1>&6
  27095. -else
  27096. -  cat > conftest.$ac_ext <<EOF
  27097. -#line 2096 "configure"
  27098. -#include "confdefs.h"
  27099. +echo "$as_me:$LINENO: checking whether cpp understands the stringify operator" >&5
  27100. +echo $ECHO_N "checking whether cpp understands the stringify operator... $ECHO_C" >&6
  27101. +if test "${gcc_cv_c_have_stringify+set}" = set; then
  27102. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27103. +else
  27104. +  cat >conftest.$ac_ext <<_ACEOF
  27105. +#line $LINENO "configure"
  27106. +/* confdefs.h.  */
  27107. +_ACEOF
  27108. +cat confdefs.h >>conftest.$ac_ext
  27109. +cat >>conftest.$ac_ext <<_ACEOF
  27110. +/* end confdefs.h.  */
  27111.  
  27112. -int main() {
  27113. +int
  27114. +main ()
  27115. +{
  27116.  #define S(x)   #x
  27117.  char *test = S(foo);
  27118. -; return 0; }
  27119. -EOF
  27120. -if { (eval echo configure:2104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  27121. -  rm -rf conftest*
  27122. +  ;
  27123. +  return 0;
  27124. +}
  27125. +_ACEOF
  27126. +rm -f conftest.$ac_objext
  27127. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  27128. +  (eval $ac_compile) 2>&5
  27129. +  ac_status=$?
  27130. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27131. +  (exit $ac_status); } &&
  27132. +         { ac_try='test -s conftest.$ac_objext'
  27133. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27134. +  (eval $ac_try) 2>&5
  27135. +  ac_status=$?
  27136. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27137. +  (exit $ac_status); }; }; then
  27138.    gcc_cv_c_have_stringify=yes
  27139.  else
  27140. -  echo "configure: failed program was:" >&5
  27141. -  cat conftest.$ac_ext >&5
  27142. -  rm -rf conftest*
  27143. -  gcc_cv_c_have_stringify=no
  27144. +  echo "$as_me: failed program was:" >&5
  27145. +sed 's/^/| /' conftest.$ac_ext >&5
  27146. +
  27147. +gcc_cv_c_have_stringify=no
  27148.  fi
  27149. -rm -f conftest*
  27150. +rm -f conftest.$ac_objext conftest.$ac_ext
  27151.  fi
  27152.  
  27153. -echo "$ac_t""$gcc_cv_c_have_stringify" 1>&6
  27154. +echo "$as_me:$LINENO: result: $gcc_cv_c_have_stringify" >&5
  27155. +echo "${ECHO_T}$gcc_cv_c_have_stringify" >&6
  27156.  if test $gcc_cv_c_have_stringify = yes; then
  27157. -  cat >> confdefs.h <<\EOF
  27158. +  cat >>confdefs.h <<\_ACEOF
  27159.  #define HAVE_CPP_STRINGIFY 1
  27160. -EOF
  27161. +_ACEOF
  27162.  
  27163.  fi
  27164.  
  27165.  # Use <inttypes.h> only if it exists,
  27166.  # doesn't clash with <sys/types.h>, and declares intmax_t.
  27167. -echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6
  27168. -echo "configure:2127: checking for inttypes.h" >&5
  27169. -if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then
  27170. -  echo $ac_n "(cached) $ac_c" 1>&6
  27171. -else
  27172. -  cat > conftest.$ac_ext <<EOF
  27173. -#line 2132 "configure"
  27174. -#include "confdefs.h"
  27175. +echo "$as_me:$LINENO: checking for inttypes.h" >&5
  27176. +echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
  27177. +if test "${gcc_cv_header_inttypes_h+set}" = set; then
  27178. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27179. +else
  27180. +  cat >conftest.$ac_ext <<_ACEOF
  27181. +#line $LINENO "configure"
  27182. +/* confdefs.h.  */
  27183. +_ACEOF
  27184. +cat confdefs.h >>conftest.$ac_ext
  27185. +cat >>conftest.$ac_ext <<_ACEOF
  27186. +/* end confdefs.h.  */
  27187.  #include <sys/types.h>
  27188.  #include <inttypes.h>
  27189. -int main() {
  27190. +int
  27191. +main ()
  27192. +{
  27193.  intmax_t i = -1;
  27194. -; return 0; }
  27195. -EOF
  27196. -if { (eval echo configure:2140: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  27197. -  rm -rf conftest*
  27198. +  ;
  27199. +  return 0;
  27200. +}
  27201. +_ACEOF
  27202. +rm -f conftest.$ac_objext
  27203. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  27204. +  (eval $ac_compile) 2>&5
  27205. +  ac_status=$?
  27206. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27207. +  (exit $ac_status); } &&
  27208. +         { ac_try='test -s conftest.$ac_objext'
  27209. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27210. +  (eval $ac_try) 2>&5
  27211. +  ac_status=$?
  27212. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27213. +  (exit $ac_status); }; }; then
  27214.    gcc_cv_header_inttypes_h=yes
  27215.  else
  27216. -  echo "configure: failed program was:" >&5
  27217. -  cat conftest.$ac_ext >&5
  27218. -  rm -rf conftest*
  27219. -  gcc_cv_header_inttypes_h=no
  27220. +  echo "$as_me: failed program was:" >&5
  27221. +sed 's/^/| /' conftest.$ac_ext >&5
  27222. +
  27223. +gcc_cv_header_inttypes_h=no
  27224.  fi
  27225. -rm -f conftest*
  27226. +rm -f conftest.$ac_objext conftest.$ac_ext
  27227.  fi
  27228.  
  27229. -echo "$ac_t""$gcc_cv_header_inttypes_h" 1>&6
  27230. +echo "$as_me:$LINENO: result: $gcc_cv_header_inttypes_h" >&5
  27231. +echo "${ECHO_T}$gcc_cv_header_inttypes_h" >&6
  27232.  if test $gcc_cv_header_inttypes_h = yes; then
  27233. -  cat >> confdefs.h <<\EOF
  27234. +  cat >>confdefs.h <<\_ACEOF
  27235.  #define HAVE_INTTYPES_H 1
  27236. -EOF
  27237. +_ACEOF
  27238.  
  27239.  fi
  27240.  
  27241. @@ -2161,56 +4507,84 @@
  27242.      sysconf isascii gettimeofday strsignal putc_unlocked fputc_unlocked \
  27243.      fputs_unlocked
  27244.  do
  27245. -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  27246. -echo "configure:2166: checking for $ac_func" >&5
  27247. -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  27248. -  echo $ac_n "(cached) $ac_c" 1>&6
  27249. -else
  27250. -  cat > conftest.$ac_ext <<EOF
  27251. -#line 2171 "configure"
  27252. -#include "confdefs.h"
  27253. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  27254. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  27255. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  27256. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  27257. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27258. +else
  27259. +  cat >conftest.$ac_ext <<_ACEOF
  27260. +#line $LINENO "configure"
  27261. +/* confdefs.h.  */
  27262. +_ACEOF
  27263. +cat confdefs.h >>conftest.$ac_ext
  27264. +cat >>conftest.$ac_ext <<_ACEOF
  27265. +/* end confdefs.h.  */
  27266.  /* System header to define __stub macros and hopefully few prototypes,
  27267. -    which can conflict with char $ac_func(); below.  */
  27268. -#include <assert.h>
  27269. +    which can conflict with char $ac_func (); below.
  27270. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  27271. +    <limits.h> exists even on freestanding compilers.  */
  27272. +#ifdef __STDC__
  27273. +# include <limits.h>
  27274. +#else
  27275. +# include <assert.h>
  27276. +#endif
  27277.  /* Override any gcc2 internal prototype to avoid an error.  */
  27278. +#ifdef __cplusplus
  27279. +extern "C"
  27280. +{
  27281. +#endif
  27282.  /* We use char because int might match the return type of a gcc2
  27283.      builtin and then its argument prototype would still apply.  */
  27284. -char $ac_func();
  27285. -
  27286. -int main() {
  27287. -
  27288. +char $ac_func ();
  27289.  /* The GNU C library defines this for functions which it implements
  27290.      to always fail with ENOSYS.  Some functions are actually named
  27291.      something starting with __ and the normal name is an alias.  */
  27292.  #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  27293.  choke me
  27294.  #else
  27295. -$ac_func();
  27296. +char (*f) () = $ac_func;
  27297. +#endif
  27298. +#ifdef __cplusplus
  27299. +}
  27300.  #endif
  27301.  
  27302. -; return 0; }
  27303. -EOF
  27304. -if { (eval echo configure:2194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  27305. -  rm -rf conftest*
  27306. -  eval "ac_cv_func_$ac_func=yes"
  27307. -else
  27308. -  echo "configure: failed program was:" >&5
  27309. -  cat conftest.$ac_ext >&5
  27310. -  rm -rf conftest*
  27311. -  eval "ac_cv_func_$ac_func=no"
  27312. -fi
  27313. -rm -f conftest*
  27314. -fi
  27315. -
  27316. -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  27317. -  echo "$ac_t""yes" 1>&6
  27318. -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  27319. -  cat >> confdefs.h <<EOF
  27320. -#define $ac_tr_func 1
  27321. -EOF
  27322. +int
  27323. +main ()
  27324. +{
  27325. +return f != $ac_func;
  27326. +  ;
  27327. +  return 0;
  27328. +}
  27329. +_ACEOF
  27330. +rm -f conftest.$ac_objext conftest$ac_exeext
  27331. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  27332. +  (eval $ac_link) 2>&5
  27333. +  ac_status=$?
  27334. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27335. +  (exit $ac_status); } &&
  27336. +         { ac_try='test -s conftest$ac_exeext'
  27337. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27338. +  (eval $ac_try) 2>&5
  27339. +  ac_status=$?
  27340. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27341. +  (exit $ac_status); }; }; then
  27342. +  eval "$as_ac_var=yes"
  27343. +else
  27344. +  echo "$as_me: failed program was:" >&5
  27345. +sed 's/^/| /' conftest.$ac_ext >&5
  27346. +
  27347. +eval "$as_ac_var=no"
  27348. +fi
  27349. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  27350. +fi
  27351. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  27352. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  27353. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  27354. +  cat >>confdefs.h <<_ACEOF
  27355. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  27356. +_ACEOF
  27357.   
  27358. -else
  27359. -  echo "$ac_t""no" 1>&6
  27360.  fi
  27361.  done
  27362.  
  27363. @@ -2218,110 +4592,170 @@
  27364.  # Make sure wchar_t is available
  27365.  #AC_CHECK_TYPE(wchar_t, unsigned int)
  27366.  
  27367. -echo $ac_n "checking for vprintf""... $ac_c" 1>&6
  27368. -echo "configure:2223: checking for vprintf" >&5
  27369. -if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
  27370. -  echo $ac_n "(cached) $ac_c" 1>&6
  27371. -else
  27372. -  cat > conftest.$ac_ext <<EOF
  27373. -#line 2228 "configure"
  27374. -#include "confdefs.h"
  27375. +
  27376. +for ac_func in vprintf
  27377. +do
  27378. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  27379. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  27380. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  27381. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  27382. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27383. +else
  27384. +  cat >conftest.$ac_ext <<_ACEOF
  27385. +#line $LINENO "configure"
  27386. +/* confdefs.h.  */
  27387. +_ACEOF
  27388. +cat confdefs.h >>conftest.$ac_ext
  27389. +cat >>conftest.$ac_ext <<_ACEOF
  27390. +/* end confdefs.h.  */
  27391.  /* System header to define __stub macros and hopefully few prototypes,
  27392. -    which can conflict with char vprintf(); below.  */
  27393. -#include <assert.h>
  27394. +    which can conflict with char $ac_func (); below.
  27395. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  27396. +    <limits.h> exists even on freestanding compilers.  */
  27397. +#ifdef __STDC__
  27398. +# include <limits.h>
  27399. +#else
  27400. +# include <assert.h>
  27401. +#endif
  27402.  /* Override any gcc2 internal prototype to avoid an error.  */
  27403. +#ifdef __cplusplus
  27404. +extern "C"
  27405. +{
  27406. +#endif
  27407.  /* We use char because int might match the return type of a gcc2
  27408.      builtin and then its argument prototype would still apply.  */
  27409. -char vprintf();
  27410. -
  27411. -int main() {
  27412. -
  27413. +char $ac_func ();
  27414.  /* The GNU C library defines this for functions which it implements
  27415.      to always fail with ENOSYS.  Some functions are actually named
  27416.      something starting with __ and the normal name is an alias.  */
  27417. -#if defined (__stub_vprintf) || defined (__stub___vprintf)
  27418. +#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  27419.  choke me
  27420.  #else
  27421. -vprintf();
  27422. +char (*f) () = $ac_func;
  27423. +#endif
  27424. +#ifdef __cplusplus
  27425. +}
  27426.  #endif
  27427.  
  27428. -; return 0; }
  27429. -EOF
  27430. -if { (eval echo configure:2251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  27431. -  rm -rf conftest*
  27432. -  eval "ac_cv_func_vprintf=yes"
  27433. -else
  27434. -  echo "configure: failed program was:" >&5
  27435. -  cat conftest.$ac_ext >&5
  27436. -  rm -rf conftest*
  27437. -  eval "ac_cv_func_vprintf=no"
  27438. -fi
  27439. -rm -f conftest*
  27440. -fi
  27441. -
  27442. -if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then
  27443. -  echo "$ac_t""yes" 1>&6
  27444. -  cat >> confdefs.h <<\EOF
  27445. -#define HAVE_VPRINTF 1
  27446. -EOF
  27447. -
  27448. -else
  27449. -  echo "$ac_t""no" 1>&6
  27450. -fi
  27451. -
  27452. -if test "$ac_cv_func_vprintf" != yes; then
  27453. -echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
  27454. -echo "configure:2275: checking for _doprnt" >&5
  27455. -if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
  27456. -  echo $ac_n "(cached) $ac_c" 1>&6
  27457. -else
  27458. -  cat > conftest.$ac_ext <<EOF
  27459. -#line 2280 "configure"
  27460. -#include "confdefs.h"
  27461. +int
  27462. +main ()
  27463. +{
  27464. +return f != $ac_func;
  27465. +  ;
  27466. +  return 0;
  27467. +}
  27468. +_ACEOF
  27469. +rm -f conftest.$ac_objext conftest$ac_exeext
  27470. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  27471. +  (eval $ac_link) 2>&5
  27472. +  ac_status=$?
  27473. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27474. +  (exit $ac_status); } &&
  27475. +         { ac_try='test -s conftest$ac_exeext'
  27476. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27477. +  (eval $ac_try) 2>&5
  27478. +  ac_status=$?
  27479. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27480. +  (exit $ac_status); }; }; then
  27481. +  eval "$as_ac_var=yes"
  27482. +else
  27483. +  echo "$as_me: failed program was:" >&5
  27484. +sed 's/^/| /' conftest.$ac_ext >&5
  27485. +
  27486. +eval "$as_ac_var=no"
  27487. +fi
  27488. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  27489. +fi
  27490. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  27491. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  27492. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  27493. +  cat >>confdefs.h <<_ACEOF
  27494. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  27495. +_ACEOF
  27496. +
  27497. +echo "$as_me:$LINENO: checking for _doprnt" >&5
  27498. +echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6
  27499. +if test "${ac_cv_func__doprnt+set}" = set; then
  27500. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27501. +else
  27502. +  cat >conftest.$ac_ext <<_ACEOF
  27503. +#line $LINENO "configure"
  27504. +/* confdefs.h.  */
  27505. +_ACEOF
  27506. +cat confdefs.h >>conftest.$ac_ext
  27507. +cat >>conftest.$ac_ext <<_ACEOF
  27508. +/* end confdefs.h.  */
  27509.  /* System header to define __stub macros and hopefully few prototypes,
  27510. -    which can conflict with char _doprnt(); below.  */
  27511. -#include <assert.h>
  27512. +    which can conflict with char _doprnt (); below.
  27513. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  27514. +    <limits.h> exists even on freestanding compilers.  */
  27515. +#ifdef __STDC__
  27516. +# include <limits.h>
  27517. +#else
  27518. +# include <assert.h>
  27519. +#endif
  27520.  /* Override any gcc2 internal prototype to avoid an error.  */
  27521. +#ifdef __cplusplus
  27522. +extern "C"
  27523. +{
  27524. +#endif
  27525.  /* We use char because int might match the return type of a gcc2
  27526.      builtin and then its argument prototype would still apply.  */
  27527. -char _doprnt();
  27528. -
  27529. -int main() {
  27530. -
  27531. +char _doprnt ();
  27532.  /* The GNU C library defines this for functions which it implements
  27533.      to always fail with ENOSYS.  Some functions are actually named
  27534.      something starting with __ and the normal name is an alias.  */
  27535.  #if defined (__stub__doprnt) || defined (__stub____doprnt)
  27536.  choke me
  27537.  #else
  27538. -_doprnt();
  27539. +char (*f) () = _doprnt;
  27540. +#endif
  27541. +#ifdef __cplusplus
  27542. +}
  27543.  #endif
  27544.  
  27545. -; return 0; }
  27546. -EOF
  27547. -if { (eval echo configure:2303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  27548. -  rm -rf conftest*
  27549. -  eval "ac_cv_func__doprnt=yes"
  27550. -else
  27551. -  echo "configure: failed program was:" >&5
  27552. -  cat conftest.$ac_ext >&5
  27553. -  rm -rf conftest*
  27554. -  eval "ac_cv_func__doprnt=no"
  27555. -fi
  27556. -rm -f conftest*
  27557. -fi
  27558. +int
  27559. +main ()
  27560. +{
  27561. +return f != _doprnt;
  27562. +  ;
  27563. +  return 0;
  27564. +}
  27565. +_ACEOF
  27566. +rm -f conftest.$ac_objext conftest$ac_exeext
  27567. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  27568. +  (eval $ac_link) 2>&5
  27569. +  ac_status=$?
  27570. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27571. +  (exit $ac_status); } &&
  27572. +         { ac_try='test -s conftest$ac_exeext'
  27573. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27574. +  (eval $ac_try) 2>&5
  27575. +  ac_status=$?
  27576. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27577. +  (exit $ac_status); }; }; then
  27578. +  ac_cv_func__doprnt=yes
  27579. +else
  27580. +  echo "$as_me: failed program was:" >&5
  27581. +sed 's/^/| /' conftest.$ac_ext >&5
  27582. +
  27583. +ac_cv_func__doprnt=no
  27584. +fi
  27585. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  27586. +fi
  27587. +echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
  27588. +echo "${ECHO_T}$ac_cv_func__doprnt" >&6
  27589. +if test $ac_cv_func__doprnt = yes; then
  27590.  
  27591. -if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then
  27592. -  echo "$ac_t""yes" 1>&6
  27593. -  cat >> confdefs.h <<\EOF
  27594. +cat >>confdefs.h <<\_ACEOF
  27595.  #define HAVE_DOPRNT 1
  27596. -EOF
  27597. +_ACEOF
  27598.  
  27599. -else
  27600. -  echo "$ac_t""no" 1>&6
  27601.  fi
  27602.  
  27603.  fi
  27604. +done
  27605. +
  27606.  
  27607.  vfprintf=
  27608.  doprint=
  27609. @@ -2334,17 +4768,21 @@
  27610.  
  27611.  
  27612.  
  27613. -echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6
  27614. -echo "configure:2339: checking whether the printf functions support %p" >&5
  27615. -if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then
  27616. -  echo $ac_n "(cached) $ac_c" 1>&6
  27617. +echo "$as_me:$LINENO: checking whether the printf functions support %p" >&5
  27618. +echo $ECHO_N "checking whether the printf functions support %p... $ECHO_C" >&6
  27619. +if test "${gcc_cv_func_printf_ptr+set}" = set; then
  27620. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27621.  else
  27622.    if test "$cross_compiling" = yes; then
  27623.    gcc_cv_func_printf_ptr=no
  27624.  else
  27625. -  cat > conftest.$ac_ext <<EOF
  27626. -#line 2347 "configure"
  27627. -#include "confdefs.h"
  27628. +  cat >conftest.$ac_ext <<_ACEOF
  27629. +#line $LINENO "configure"
  27630. +/* confdefs.h.  */
  27631. +_ACEOF
  27632. +cat confdefs.h >>conftest.$ac_ext
  27633. +cat >>conftest.$ac_ext <<_ACEOF
  27634. +/* end confdefs.h.  */
  27635.  #include <stdio.h>
  27636.  
  27637.  main()
  27638. @@ -2355,186 +4793,441 @@
  27639.    sscanf(buf, "%p", &q);
  27640.    exit (p != q);
  27641.  }
  27642. -EOF
  27643. -if { (eval echo configure:2360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  27644. -then
  27645. +_ACEOF
  27646. +rm -f conftest$ac_exeext
  27647. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  27648. +  (eval $ac_link) 2>&5
  27649. +  ac_status=$?
  27650. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27651. +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  27652. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27653. +  (eval $ac_try) 2>&5
  27654. +  ac_status=$?
  27655. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27656. +  (exit $ac_status); }; }; then
  27657.    gcc_cv_func_printf_ptr=yes
  27658.  else
  27659. -  echo "configure: failed program was:" >&5
  27660. -  cat conftest.$ac_ext >&5
  27661. -  rm -fr conftest*
  27662. -  gcc_cv_func_printf_ptr=no
  27663. +  echo "$as_me: program exited with status $ac_status" >&5
  27664. +echo "$as_me: failed program was:" >&5
  27665. +sed 's/^/| /' conftest.$ac_ext >&5
  27666. +
  27667. +( exit $ac_status )
  27668. +gcc_cv_func_printf_ptr=no
  27669.  fi
  27670. -rm -fr conftest*
  27671. +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  27672.  fi
  27673. -
  27674.  rm -f core core.* *.core
  27675.  fi
  27676. -
  27677. -echo "$ac_t""$gcc_cv_func_printf_ptr" 1>&6
  27678. +echo "$as_me:$LINENO: result: $gcc_cv_func_printf_ptr" >&5
  27679. +echo "${ECHO_T}$gcc_cv_func_printf_ptr" >&6
  27680.  if test $gcc_cv_func_printf_ptr = yes ; then
  27681. -  cat >> confdefs.h <<\EOF
  27682. +  cat >>confdefs.h <<\_ACEOF
  27683.  #define HAVE_PRINTF_PTR 1
  27684. -EOF
  27685. +_ACEOF
  27686.  
  27687.  fi
  27688.  
  27689.  
  27690.  case "${host}" in
  27691.  *-*-uwin*)
  27692. -  { echo "configure: error: 
  27693. +  { { echo "$as_me:$LINENO: error:
  27694.  *** UWIN may not be used as a host platform because
  27695. -*** linking with posix.dll is not allowed by the GNU GPL" 1>&2; exit 1; }
  27696. +*** linking with posix.dll is not allowed by the GNU GPL" >&5
  27697. +echo "$as_me: error:
  27698. +*** UWIN may not be used as a host platform because
  27699. +*** linking with posix.dll is not allowed by the GNU GPL" >&2;}
  27700. +   { (exit 1); exit 1; }; }
  27701.    ;;
  27702.  esac
  27703. -echo $ac_n "checking for pid_t""... $ac_c" 1>&6
  27704. -echo "configure:2392: checking for pid_t" >&5
  27705. -if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
  27706. -  echo $ac_n "(cached) $ac_c" 1>&6
  27707. -else
  27708. -  cat > conftest.$ac_ext <<EOF
  27709. -#line 2397 "configure"
  27710. -#include "confdefs.h"
  27711. -#include <sys/types.h>
  27712. -#if STDC_HEADERS
  27713. -#include <stdlib.h>
  27714. -#include <stddef.h>
  27715. -#endif
  27716. -EOF
  27717. -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  27718. -  egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
  27719. -  rm -rf conftest*
  27720. +echo "$as_me:$LINENO: checking for pid_t" >&5
  27721. +echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
  27722. +if test "${ac_cv_type_pid_t+set}" = set; then
  27723. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27724. +else
  27725. +  cat >conftest.$ac_ext <<_ACEOF
  27726. +#line $LINENO "configure"
  27727. +/* confdefs.h.  */
  27728. +_ACEOF
  27729. +cat confdefs.h >>conftest.$ac_ext
  27730. +cat >>conftest.$ac_ext <<_ACEOF
  27731. +/* end confdefs.h.  */
  27732. +$ac_includes_default
  27733. +int
  27734. +main ()
  27735. +{
  27736. +if ((pid_t *) 0)
  27737. +  return 0;
  27738. +if (sizeof (pid_t))
  27739. +  return 0;
  27740. +  ;
  27741. +  return 0;
  27742. +}
  27743. +_ACEOF
  27744. +rm -f conftest.$ac_objext
  27745. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  27746. +  (eval $ac_compile) 2>&5
  27747. +  ac_status=$?
  27748. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27749. +  (exit $ac_status); } &&
  27750. +         { ac_try='test -s conftest.$ac_objext'
  27751. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27752. +  (eval $ac_try) 2>&5
  27753. +  ac_status=$?
  27754. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27755. +  (exit $ac_status); }; }; then
  27756.    ac_cv_type_pid_t=yes
  27757.  else
  27758. -  rm -rf conftest*
  27759. -  ac_cv_type_pid_t=no
  27760. -fi
  27761. -rm -f conftest*
  27762. +  echo "$as_me: failed program was:" >&5
  27763. +sed 's/^/| /' conftest.$ac_ext >&5
  27764.  
  27765. +ac_cv_type_pid_t=no
  27766.  fi
  27767. -echo "$ac_t""$ac_cv_type_pid_t" 1>&6
  27768. -if test $ac_cv_type_pid_t = no; then
  27769. -  cat >> confdefs.h <<\EOF
  27770. +rm -f conftest.$ac_objext conftest.$ac_ext
  27771. +fi
  27772. +echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
  27773. +echo "${ECHO_T}$ac_cv_type_pid_t" >&6
  27774. +if test $ac_cv_type_pid_t = yes; then
  27775. +  :
  27776. +else
  27777. +
  27778. +cat >>confdefs.h <<_ACEOF
  27779.  #define pid_t int
  27780. -EOF
  27781. +_ACEOF
  27782.  
  27783.  fi
  27784.  
  27785. -ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
  27786. -echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
  27787. -echo "configure:2426: checking for vfork.h" >&5
  27788. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  27789. -  echo $ac_n "(cached) $ac_c" 1>&6
  27790. -else
  27791. -  cat > conftest.$ac_ext <<EOF
  27792. -#line 2431 "configure"
  27793. -#include "confdefs.h"
  27794. -#include <vfork.h>
  27795. -EOF
  27796. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  27797. -{ (eval echo configure:2436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  27798. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  27799. -if test -z "$ac_err"; then
  27800. -  rm -rf conftest*
  27801. -  eval "ac_cv_header_$ac_safe=yes"
  27802. -else
  27803. -  echo "$ac_err" >&5
  27804. -  echo "configure: failed program was:" >&5
  27805. -  cat conftest.$ac_ext >&5
  27806. -  rm -rf conftest*
  27807. -  eval "ac_cv_header_$ac_safe=no"
  27808. +
  27809. +
  27810. +for ac_header in unistd.h vfork.h
  27811. +do
  27812. +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  27813. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  27814. +  echo "$as_me:$LINENO: checking for $ac_header" >&5
  27815. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  27816. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  27817. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27818. +fi
  27819. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  27820. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  27821. +else
  27822. +  # Is the header compilable?
  27823. +echo "$as_me:$LINENO: checking $ac_header usability" >&5
  27824. +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  27825. +cat >conftest.$ac_ext <<_ACEOF
  27826. +#line $LINENO "configure"
  27827. +/* confdefs.h.  */
  27828. +_ACEOF
  27829. +cat confdefs.h >>conftest.$ac_ext
  27830. +cat >>conftest.$ac_ext <<_ACEOF
  27831. +/* end confdefs.h.  */
  27832. +$ac_includes_default
  27833. +#include <$ac_header>
  27834. +_ACEOF
  27835. +rm -f conftest.$ac_objext
  27836. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  27837. +  (eval $ac_compile) 2>&5
  27838. +  ac_status=$?
  27839. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27840. +  (exit $ac_status); } &&
  27841. +         { ac_try='test -s conftest.$ac_objext'
  27842. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  27843. +  (eval $ac_try) 2>&5
  27844. +  ac_status=$?
  27845. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27846. +  (exit $ac_status); }; }; then
  27847. +  ac_header_compiler=yes
  27848. +else
  27849. +  echo "$as_me: failed program was:" >&5
  27850. +sed 's/^/| /' conftest.$ac_ext >&5
  27851. +
  27852. +ac_header_compiler=no
  27853. +fi
  27854. +rm -f conftest.$ac_objext conftest.$ac_ext
  27855. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  27856. +echo "${ECHO_T}$ac_header_compiler" >&6
  27857. +
  27858. +# Is the header present?
  27859. +echo "$as_me:$LINENO: checking $ac_header presence" >&5
  27860. +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  27861. +cat >conftest.$ac_ext <<_ACEOF
  27862. +#line $LINENO "configure"
  27863. +/* confdefs.h.  */
  27864. +_ACEOF
  27865. +cat confdefs.h >>conftest.$ac_ext
  27866. +cat >>conftest.$ac_ext <<_ACEOF
  27867. +/* end confdefs.h.  */
  27868. +#include <$ac_header>
  27869. +_ACEOF
  27870. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  27871. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  27872. +  ac_status=$?
  27873. +  grep -v '^ *+' conftest.er1 >conftest.err
  27874. +  rm -f conftest.er1
  27875. +  cat conftest.err >&5
  27876. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  27877. +  (exit $ac_status); } >/dev/null; then
  27878. +  if test -s conftest.err; then
  27879. +    ac_cpp_err=$ac_c_preproc_warn_flag
  27880. +  else
  27881. +    ac_cpp_err=
  27882. +  fi
  27883. +else
  27884. +  ac_cpp_err=yes
  27885. +fi
  27886. +if test -z "$ac_cpp_err"; then
  27887. +  ac_header_preproc=yes
  27888. +else
  27889. +  echo "$as_me: failed program was:" >&5
  27890. +sed 's/^/| /' conftest.$ac_ext >&5
  27891. +
  27892. +  ac_header_preproc=no
  27893. +fi
  27894. +rm -f conftest.err conftest.$ac_ext
  27895. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  27896. +echo "${ECHO_T}$ac_header_preproc" >&6
  27897. +
  27898. +# So?  What about this header?
  27899. +case $ac_header_compiler:$ac_header_preproc in
  27900. +  yes:no )
  27901. +    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  27902. +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
  27903. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  27904. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  27905. +    (
  27906. +      cat <<\_ASBOX
  27907. +## ------------------------------------ ##
  27908. +## Report this to bug-autoconf@gnu.org. ##
  27909. +## ------------------------------------ ##
  27910. +_ASBOX
  27911. +    ) |
  27912. +      sed "s/^/$as_me: WARNING:     /" >&2
  27913. +    ;;
  27914. +  no:yes )
  27915. +    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  27916. +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
  27917. +    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
  27918. +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
  27919. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  27920. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  27921. +    (
  27922. +      cat <<\_ASBOX
  27923. +## ------------------------------------ ##
  27924. +## Report this to bug-autoconf@gnu.org. ##
  27925. +## ------------------------------------ ##
  27926. +_ASBOX
  27927. +    ) |
  27928. +      sed "s/^/$as_me: WARNING:     /" >&2
  27929. +    ;;
  27930. +esac
  27931. +echo "$as_me:$LINENO: checking for $ac_header" >&5
  27932. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  27933. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  27934. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27935. +else
  27936. +  eval "$as_ac_Header=$ac_header_preproc"
  27937.  fi
  27938. -rm -f conftest*
  27939. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  27940. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  27941. +
  27942.  fi
  27943. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  27944. -  echo "$ac_t""yes" 1>&6
  27945. -  cat >> confdefs.h <<\EOF
  27946. -#define HAVE_VFORK_H 1
  27947. -EOF
  27948. +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  27949. +  cat >>confdefs.h <<_ACEOF
  27950. +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  27951. +_ACEOF
  27952.  
  27953. -else
  27954. -  echo "$ac_t""no" 1>&6
  27955.  fi
  27956.  
  27957. -echo $ac_n "checking for working vfork""... $ac_c" 1>&6
  27958. -echo "configure:2461: checking for working vfork" >&5
  27959. -if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
  27960. -  echo $ac_n "(cached) $ac_c" 1>&6
  27961. -else
  27962. -  if test "$cross_compiling" = yes; then
  27963. -  echo $ac_n "checking for vfork""... $ac_c" 1>&6
  27964. -echo "configure:2467: checking for vfork" >&5
  27965. -if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
  27966. -  echo $ac_n "(cached) $ac_c" 1>&6
  27967. -else
  27968. -  cat > conftest.$ac_ext <<EOF
  27969. -#line 2472 "configure"
  27970. -#include "confdefs.h"
  27971. +done
  27972. +
  27973. +
  27974. +
  27975. +for ac_func in fork vfork
  27976. +do
  27977. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  27978. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  27979. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  27980. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  27981. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  27982. +else
  27983. +  cat >conftest.$ac_ext <<_ACEOF
  27984. +#line $LINENO "configure"
  27985. +/* confdefs.h.  */
  27986. +_ACEOF
  27987. +cat confdefs.h >>conftest.$ac_ext
  27988. +cat >>conftest.$ac_ext <<_ACEOF
  27989. +/* end confdefs.h.  */
  27990.  /* System header to define __stub macros and hopefully few prototypes,
  27991. -    which can conflict with char vfork(); below.  */
  27992. -#include <assert.h>
  27993. +    which can conflict with char $ac_func (); below.
  27994. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  27995. +    <limits.h> exists even on freestanding compilers.  */
  27996. +#ifdef __STDC__
  27997. +# include <limits.h>
  27998. +#else
  27999. +# include <assert.h>
  28000. +#endif
  28001.  /* Override any gcc2 internal prototype to avoid an error.  */
  28002. +#ifdef __cplusplus
  28003. +extern "C"
  28004. +{
  28005. +#endif
  28006.  /* We use char because int might match the return type of a gcc2
  28007.      builtin and then its argument prototype would still apply.  */
  28008. -char vfork();
  28009. -
  28010. -int main() {
  28011. -
  28012. +char $ac_func ();
  28013.  /* The GNU C library defines this for functions which it implements
  28014.      to always fail with ENOSYS.  Some functions are actually named
  28015.      something starting with __ and the normal name is an alias.  */
  28016. -#if defined (__stub_vfork) || defined (__stub___vfork)
  28017. +#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  28018.  choke me
  28019.  #else
  28020. -vfork();
  28021. +char (*f) () = $ac_func;
  28022. +#endif
  28023. +#ifdef __cplusplus
  28024. +}
  28025.  #endif
  28026.  
  28027. -; return 0; }
  28028. -EOF
  28029. -if { (eval echo configure:2495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  28030. -  rm -rf conftest*
  28031. -  eval "ac_cv_func_vfork=yes"
  28032. -else
  28033. -  echo "configure: failed program was:" >&5
  28034. -  cat conftest.$ac_ext >&5
  28035. -  rm -rf conftest*
  28036. -  eval "ac_cv_func_vfork=no"
  28037. -fi
  28038. -rm -f conftest*
  28039. +int
  28040. +main ()
  28041. +{
  28042. +return f != $ac_func;
  28043. +  ;
  28044. +  return 0;
  28045. +}
  28046. +_ACEOF
  28047. +rm -f conftest.$ac_objext conftest$ac_exeext
  28048. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  28049. +  (eval $ac_link) 2>&5
  28050. +  ac_status=$?
  28051. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28052. +  (exit $ac_status); } &&
  28053. +         { ac_try='test -s conftest$ac_exeext'
  28054. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28055. +  (eval $ac_try) 2>&5
  28056. +  ac_status=$?
  28057. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28058. +  (exit $ac_status); }; }; then
  28059. +  eval "$as_ac_var=yes"
  28060. +else
  28061. +  echo "$as_me: failed program was:" >&5
  28062. +sed 's/^/| /' conftest.$ac_ext >&5
  28063. +
  28064. +eval "$as_ac_var=no"
  28065. +fi
  28066. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  28067. +fi
  28068. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  28069. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  28070. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  28071. +  cat >>confdefs.h <<_ACEOF
  28072. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  28073. +_ACEOF
  28074. +
  28075.  fi
  28076. +done
  28077.  
  28078. -if eval "test \"`echo '$ac_cv_func_'vfork`\" = yes"; then
  28079. -  echo "$ac_t""yes" 1>&6
  28080. -  :
  28081. +if test "x$ac_cv_func_fork" = xyes; then
  28082. +  echo "$as_me:$LINENO: checking for working fork" >&5
  28083. +echo $ECHO_N "checking for working fork... $ECHO_C" >&6
  28084. +if test "${ac_cv_func_fork_works+set}" = set; then
  28085. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28086. +else
  28087. +  if test "$cross_compiling" = yes; then
  28088. +  ac_cv_func_fork_works=cross
  28089.  else
  28090. -  echo "$ac_t""no" 1>&6
  28091. +  cat >conftest.$ac_ext <<_ACEOF
  28092. +/* By Ruediger Kuhlmann. */
  28093. +      #include <sys/types.h>
  28094. +      #if HAVE_UNISTD_H
  28095. +      # include <unistd.h>
  28096. +      #endif
  28097. +      /* Some systems only have a dummy stub for fork() */
  28098. +      int main ()
  28099. +      {
  28100. +        if (fork() < 0)
  28101. +          exit (1);
  28102. +        exit (0);
  28103. +      }
  28104. +_ACEOF
  28105. +rm -f conftest$ac_exeext
  28106. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  28107. +  (eval $ac_link) 2>&5
  28108. +  ac_status=$?
  28109. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28110. +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  28111. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28112. +  (eval $ac_try) 2>&5
  28113. +  ac_status=$?
  28114. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28115. +  (exit $ac_status); }; }; then
  28116. +  ac_cv_func_fork_works=yes
  28117. +else
  28118. +  echo "$as_me: program exited with status $ac_status" >&5
  28119. +echo "$as_me: failed program was:" >&5
  28120. +sed 's/^/| /' conftest.$ac_ext >&5
  28121. +
  28122. +( exit $ac_status )
  28123. +ac_cv_func_fork_works=no
  28124. +fi
  28125. +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  28126. +fi
  28127. +fi
  28128. +echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5
  28129. +echo "${ECHO_T}$ac_cv_func_fork_works" >&6
  28130. +
  28131. +else
  28132. +  ac_cv_func_fork_works=$ac_cv_func_fork
  28133. +fi
  28134. +if test "x$ac_cv_func_fork_works" = xcross; then
  28135. +  case $host in
  28136. +    *-*-amigaos* | *-*-msdosdjgpp*)
  28137. +      # Override, as these systems have only a dummy fork() stub
  28138. +      ac_cv_func_fork_works=no
  28139. +      ;;
  28140. +    *)
  28141. +      ac_cv_func_fork_works=yes
  28142. +      ;;
  28143. +  esac
  28144. +  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
  28145. +echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
  28146.  fi
  28147. -
  28148.  ac_cv_func_vfork_works=$ac_cv_func_vfork
  28149. +if test "x$ac_cv_func_vfork" = xyes; then
  28150. +  echo "$as_me:$LINENO: checking for working vfork" >&5
  28151. +echo $ECHO_N "checking for working vfork... $ECHO_C" >&6
  28152. +if test "${ac_cv_func_vfork_works+set}" = set; then
  28153. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28154.  else
  28155. -  cat > conftest.$ac_ext <<EOF
  28156. -#line 2517 "configure"
  28157. -#include "confdefs.h"
  28158. +  if test "$cross_compiling" = yes; then
  28159. +  ac_cv_func_vfork_works=cross
  28160. +else
  28161. +  cat >conftest.$ac_ext <<_ACEOF
  28162. +#line $LINENO "configure"
  28163. +/* confdefs.h.  */
  28164. +_ACEOF
  28165. +cat confdefs.h >>conftest.$ac_ext
  28166. +cat >>conftest.$ac_ext <<_ACEOF
  28167. +/* end confdefs.h.  */
  28168.  /* Thanks to Paul Eggert for this test.  */
  28169.  #include <stdio.h>
  28170. +#include <stdlib.h>
  28171.  #include <sys/types.h>
  28172.  #include <sys/stat.h>
  28173. -#ifdef HAVE_UNISTD_H
  28174. -#include <unistd.h>
  28175. +#include <sys/wait.h>
  28176. +#if HAVE_UNISTD_H
  28177. +# include <unistd.h>
  28178.  #endif
  28179. -#ifdef HAVE_VFORK_H
  28180. -#include <vfork.h>
  28181. +#if HAVE_VFORK_H
  28182. +# include <vfork.h>
  28183.  #endif
  28184.  /* On some sparc systems, changes by the child to local and incoming
  28185. -   argument registers are propagated back to the parent.
  28186. -   The compiler is told about this with #include <vfork.h>,
  28187. -   but some compilers (e.g. gcc -O) don't grok <vfork.h>.
  28188. -   Test for this by using a static variable whose address
  28189. -   is put into a register that is clobbered by the vfork.  */
  28190. -static
  28191. +   argument registers are propagated back to the parent.  The compiler
  28192. +   is told about this with #include <vfork.h>, but some compilers
  28193. +   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
  28194. +   static variable whose address is put into a register that is
  28195. +   clobbered by the vfork.  */
  28196. +static void
  28197.  #ifdef __cplusplus
  28198.  sparc_address_test (int arg)
  28199. -#else
  28200. +# else
  28201.  sparc_address_test (arg) int arg;
  28202.  #endif
  28203.  {
  28204. @@ -2552,25 +5245,27 @@
  28205.      }
  28206.    }
  28207.  }
  28208. -main() {
  28209. -  pid_t parent = getpid ();
  28210. -  pid_t child;
  28211. -
  28212. -  sparc_address_test ();
  28213. +
  28214. +int
  28215. +main ()
  28216. +{
  28217. +  pid_t parent = getpid ();
  28218. +  pid_t child;
  28219. +
  28220. +  sparc_address_test (0);
  28221.  
  28222.    child = vfork ();
  28223.  
  28224.    if (child == 0) {
  28225. -    /* Here is another test for sparc vfork register problems.
  28226. -       This test uses lots of local variables, at least
  28227. -       as many local variables as main has allocated so far
  28228. -       including compiler temporaries.  4 locals are enough for
  28229. -       gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe.
  28230. -       A buggy compiler should reuse the register of parent
  28231. -       for one of the local variables, since it will think that
  28232. -       parent can't possibly be used any more in this routine.
  28233. -       Assigning to the local variable will thus munge parent
  28234. -       in the parent process.  */
  28235. +    /* Here is another test for sparc vfork register problems.  This
  28236. +       test uses lots of local variables, at least as many local
  28237. +       variables as main has allocated so far including compiler
  28238. +       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
  28239. +       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
  28240. +       reuse the register of parent for one of the local variables,
  28241. +       since it will think that parent can't possibly be used any more
  28242. +       in this routine.  Assigning to the local variable will thus
  28243. +       munge parent in the parent process.  */
  28244.      pid_t
  28245.        p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
  28246.        p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
  28247. @@ -2580,11 +5275,10 @@
  28248.      || p != p5 || p != p6 || p != p7)
  28249.        _exit(1);
  28250.  
  28251. -    /* On some systems (e.g. IRIX 3.3),
  28252. -       vfork doesn't separate parent from child file descriptors.
  28253. -       If the child closes a descriptor before it execs or exits,
  28254. -       this munges the parent's descriptor as well.
  28255. -       Test for this by closing stdout in the child.  */
  28256. +    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
  28257. +       from child file descriptors.  If the child closes a descriptor
  28258. +       before it execs or exits, this munges the parent's descriptor
  28259. +       as well.  Test for this by closing stdout in the child.  */
  28260.      _exit(close(fileno(stdout)) != 0);
  28261.    } else {
  28262.      int status;
  28263. @@ -2607,26 +5301,58 @@
  28264.       );
  28265.    }
  28266.  }
  28267. -EOF
  28268. -if { (eval echo configure:2612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  28269. -then
  28270. +_ACEOF
  28271. +rm -f conftest$ac_exeext
  28272. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  28273. +  (eval $ac_link) 2>&5
  28274. +  ac_status=$?
  28275. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28276. +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  28277. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28278. +  (eval $ac_try) 2>&5
  28279. +  ac_status=$?
  28280. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28281. +  (exit $ac_status); }; }; then
  28282.    ac_cv_func_vfork_works=yes
  28283.  else
  28284. -  echo "configure: failed program was:" >&5
  28285. -  cat conftest.$ac_ext >&5
  28286. -  rm -fr conftest*
  28287. -  ac_cv_func_vfork_works=no
  28288. +  echo "$as_me: program exited with status $ac_status" >&5
  28289. +echo "$as_me: failed program was:" >&5
  28290. +sed 's/^/| /' conftest.$ac_ext >&5
  28291. +
  28292. +( exit $ac_status )
  28293. +ac_cv_func_vfork_works=no
  28294.  fi
  28295. -rm -fr conftest*
  28296. +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  28297.  fi
  28298. +fi
  28299. +echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5
  28300. +echo "${ECHO_T}$ac_cv_func_vfork_works" >&6
  28301.  
  28302. +fi;
  28303. +if test "x$ac_cv_func_fork_works" = xcross; then
  28304. +  ac_cv_func_vfork_works=ac_cv_func_vfork
  28305. +  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
  28306. +echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
  28307.  fi
  28308.  
  28309. -echo "$ac_t""$ac_cv_func_vfork_works" 1>&6
  28310. -if test $ac_cv_func_vfork_works = no; then
  28311. -  cat >> confdefs.h <<\EOF
  28312. +if test "x$ac_cv_func_vfork_works" = xyes; then
  28313. +
  28314. +cat >>confdefs.h <<\_ACEOF
  28315. +#define HAVE_WORKING_VFORK 1
  28316. +_ACEOF
  28317. +
  28318. +else
  28319. +
  28320. +cat >>confdefs.h <<\_ACEOF
  28321.  #define vfork fork
  28322. -EOF
  28323. +_ACEOF
  28324. +
  28325. +fi
  28326. +if test "x$ac_cv_func_fork_works" = xyes; then
  28327. +
  28328. +cat >>confdefs.h <<\_ACEOF
  28329. +#define HAVE_WORKING_FORK 1
  28330. +_ACEOF
  28331.  
  28332.  fi
  28333.  
  28334. @@ -2635,14 +5361,18 @@
  28335.      index rindex getenv atol sbrk abort atof strerror getcwd getwd \
  28336.      strsignal putc_unlocked fputs_unlocked strstr
  28337.  do
  28338. -echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6
  28339. -echo "configure:2640: checking whether $ac_func must be declared" >&5
  28340. -if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then
  28341. -  echo $ac_n "(cached) $ac_c" 1>&6
  28342. -else
  28343. -  cat > conftest.$ac_ext <<EOF
  28344. -#line 2645 "configure"
  28345. -#include "confdefs.h"
  28346. +echo "$as_me:$LINENO: checking whether $ac_func must be declared" >&5
  28347. +echo $ECHO_N "checking whether $ac_func must be declared... $ECHO_C" >&6
  28348. +if eval "test \"\${gcc_cv_decl_needed_$ac_func+set}\" = set"; then
  28349. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28350. +else
  28351. +  cat >conftest.$ac_ext <<_ACEOF
  28352. +#line $LINENO "configure"
  28353. +/* confdefs.h.  */
  28354. +_ACEOF
  28355. +cat confdefs.h >>conftest.$ac_ext
  28356. +cat >>conftest.$ac_ext <<_ACEOF
  28357. +/* end confdefs.h.  */
  28358.  
  28359.  #include <stdio.h>
  28360.  #ifdef STRING_WITH_STRINGS
  28361. @@ -2670,31 +5400,47 @@
  28362.  #define index strchr
  28363.  #endif
  28364.  
  28365. -int main() {
  28366. +int
  28367. +main ()
  28368. +{
  28369.  char *(*pfn) = (char *(*)) $ac_func
  28370. -; return 0; }
  28371. -EOF
  28372. -if { (eval echo configure:2678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  28373. -  rm -rf conftest*
  28374. +  ;
  28375. +  return 0;
  28376. +}
  28377. +_ACEOF
  28378. +rm -f conftest.$ac_objext
  28379. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  28380. +  (eval $ac_compile) 2>&5
  28381. +  ac_status=$?
  28382. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28383. +  (exit $ac_status); } &&
  28384. +         { ac_try='test -s conftest.$ac_objext'
  28385. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28386. +  (eval $ac_try) 2>&5
  28387. +  ac_status=$?
  28388. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28389. +  (exit $ac_status); }; }; then
  28390.    eval "gcc_cv_decl_needed_$ac_func=no"
  28391.  else
  28392. -  echo "configure: failed program was:" >&5
  28393. -  cat conftest.$ac_ext >&5
  28394. -  rm -rf conftest*
  28395. -  eval "gcc_cv_decl_needed_$ac_func=yes"
  28396. +  echo "$as_me: failed program was:" >&5
  28397. +sed 's/^/| /' conftest.$ac_ext >&5
  28398. +
  28399. +eval "gcc_cv_decl_needed_$ac_func=yes"
  28400.  fi
  28401. -rm -f conftest*
  28402. +rm -f conftest.$ac_objext conftest.$ac_ext
  28403.  fi
  28404.  
  28405.  if eval "test \"`echo '$gcc_cv_decl_needed_'$ac_func`\" = yes"; then
  28406. -  echo "$ac_t""yes" 1>&6
  28407. +  echo "$as_me:$LINENO: result: yes" >&5
  28408. +echo "${ECHO_T}yes" >&6
  28409.    gcc_tr_decl=NEED_DECLARATION_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  28410. -  cat >> confdefs.h <<EOF
  28411. +  cat >>confdefs.h <<_ACEOF
  28412.  #define $gcc_tr_decl 1
  28413. -EOF
  28414. +_ACEOF
  28415.  
  28416.  else
  28417. -  echo "$ac_t""no" 1>&6
  28418. +  echo "$as_me:$LINENO: result: no" >&5
  28419. +echo "${ECHO_T}no" >&6
  28420.  fi
  28421.  
  28422.  done
  28423. @@ -2702,14 +5448,18 @@
  28424.  
  28425.  for ac_func in getrlimit setrlimit
  28426.  do
  28427. -echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6
  28428. -echo "configure:2707: checking whether $ac_func must be declared" >&5
  28429. -if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then
  28430. -  echo $ac_n "(cached) $ac_c" 1>&6
  28431. -else
  28432. -  cat > conftest.$ac_ext <<EOF
  28433. -#line 2712 "configure"
  28434. -#include "confdefs.h"
  28435. +echo "$as_me:$LINENO: checking whether $ac_func must be declared" >&5
  28436. +echo $ECHO_N "checking whether $ac_func must be declared... $ECHO_C" >&6
  28437. +if eval "test \"\${gcc_cv_decl_needed_$ac_func+set}\" = set"; then
  28438. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28439. +else
  28440. +  cat >conftest.$ac_ext <<_ACEOF
  28441. +#line $LINENO "configure"
  28442. +/* confdefs.h.  */
  28443. +_ACEOF
  28444. +cat confdefs.h >>conftest.$ac_ext
  28445. +cat >>conftest.$ac_ext <<_ACEOF
  28446. +/* end confdefs.h.  */
  28447.  
  28448.  #include <stdio.h>
  28449.  #ifdef STRING_WITH_STRINGS
  28450. @@ -2741,71 +5491,111 @@
  28451.  #include <sys/resource.h>
  28452.  #endif
  28453.  
  28454. -int main() {
  28455. +int
  28456. +main ()
  28457. +{
  28458.  char *(*pfn) = (char *(*)) $ac_func
  28459. -; return 0; }
  28460. -EOF
  28461. -if { (eval echo configure:2749: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  28462. -  rm -rf conftest*
  28463. +  ;
  28464. +  return 0;
  28465. +}
  28466. +_ACEOF
  28467. +rm -f conftest.$ac_objext
  28468. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  28469. +  (eval $ac_compile) 2>&5
  28470. +  ac_status=$?
  28471. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28472. +  (exit $ac_status); } &&
  28473. +         { ac_try='test -s conftest.$ac_objext'
  28474. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28475. +  (eval $ac_try) 2>&5
  28476. +  ac_status=$?
  28477. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28478. +  (exit $ac_status); }; }; then
  28479.    eval "gcc_cv_decl_needed_$ac_func=no"
  28480.  else
  28481. -  echo "configure: failed program was:" >&5
  28482. -  cat conftest.$ac_ext >&5
  28483. -  rm -rf conftest*
  28484. -  eval "gcc_cv_decl_needed_$ac_func=yes"
  28485. +  echo "$as_me: failed program was:" >&5
  28486. +sed 's/^/| /' conftest.$ac_ext >&5
  28487. +
  28488. +eval "gcc_cv_decl_needed_$ac_func=yes"
  28489.  fi
  28490. -rm -f conftest*
  28491. +rm -f conftest.$ac_objext conftest.$ac_ext
  28492.  fi
  28493.  
  28494.  if eval "test \"`echo '$gcc_cv_decl_needed_'$ac_func`\" = yes"; then
  28495. -  echo "$ac_t""yes" 1>&6
  28496. +  echo "$as_me:$LINENO: result: yes" >&5
  28497. +echo "${ECHO_T}yes" >&6
  28498.    gcc_tr_decl=NEED_DECLARATION_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  28499. -  cat >> confdefs.h <<EOF
  28500. +  cat >>confdefs.h <<_ACEOF
  28501.  #define $gcc_tr_decl 1
  28502. -EOF
  28503. +_ACEOF
  28504.  
  28505.  else
  28506. -  echo "$ac_t""no" 1>&6
  28507. +  echo "$as_me:$LINENO: result: no" >&5
  28508. +echo "${ECHO_T}no" >&6
  28509.  fi
  28510.  
  28511.  done
  28512.  
  28513.  
  28514. -echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
  28515. -echo "configure:2776: checking for sys_siglist declaration in signal.h or unistd.h" >&5
  28516. -if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
  28517. -  echo $ac_n "(cached) $ac_c" 1>&6
  28518. -else
  28519. -  cat > conftest.$ac_ext <<EOF
  28520. -#line 2781 "configure"
  28521. -#include "confdefs.h"
  28522. -#include <sys/types.h>
  28523. -#include <signal.h>
  28524. -/* NetBSD declares sys_siglist in unistd.h.  */
  28525. -#ifdef HAVE_UNISTD_H
  28526. -#include <unistd.h>
  28527. +echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5
  28528. +echo $ECHO_N "checking whether sys_siglist is declared... $ECHO_C" >&6
  28529. +if test "${ac_cv_have_decl_sys_siglist+set}" = set; then
  28530. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28531. +else
  28532. +  cat >conftest.$ac_ext <<_ACEOF
  28533. +#line $LINENO "configure"
  28534. +/* confdefs.h.  */
  28535. +_ACEOF
  28536. +cat confdefs.h >>conftest.$ac_ext
  28537. +cat >>conftest.$ac_ext <<_ACEOF
  28538. +/* end confdefs.h.  */
  28539. +$ac_includes_default
  28540. +int
  28541. +main ()
  28542. +{
  28543. +#ifndef sys_siglist
  28544. +  char *p = (char *) sys_siglist;
  28545.  #endif
  28546. -int main() {
  28547. -char *msg = *(sys_siglist + 1);
  28548. -; return 0; }
  28549. -EOF
  28550. -if { (eval echo configure:2793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  28551. -  rm -rf conftest*
  28552. -  ac_cv_decl_sys_siglist=yes
  28553. -else
  28554. -  echo "configure: failed program was:" >&5
  28555. -  cat conftest.$ac_ext >&5
  28556. -  rm -rf conftest*
  28557. -  ac_cv_decl_sys_siglist=no
  28558. -fi
  28559. -rm -f conftest*
  28560. -fi
  28561.  
  28562. -echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6
  28563. -if test $ac_cv_decl_sys_siglist = yes; then
  28564. -  cat >> confdefs.h <<\EOF
  28565. -#define SYS_SIGLIST_DECLARED 1
  28566. -EOF
  28567. +  ;
  28568. +  return 0;
  28569. +}
  28570. +_ACEOF
  28571. +rm -f conftest.$ac_objext
  28572. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  28573. +  (eval $ac_compile) 2>&5
  28574. +  ac_status=$?
  28575. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28576. +  (exit $ac_status); } &&
  28577. +         { ac_try='test -s conftest.$ac_objext'
  28578. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28579. +  (eval $ac_try) 2>&5
  28580. +  ac_status=$?
  28581. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28582. +  (exit $ac_status); }; }; then
  28583. +  ac_cv_have_decl_sys_siglist=yes
  28584. +else
  28585. +  echo "$as_me: failed program was:" >&5
  28586. +sed 's/^/| /' conftest.$ac_ext >&5
  28587. +
  28588. +ac_cv_have_decl_sys_siglist=no
  28589. +fi
  28590. +rm -f conftest.$ac_objext conftest.$ac_ext
  28591. +fi
  28592. +echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_siglist" >&5
  28593. +echo "${ECHO_T}$ac_cv_have_decl_sys_siglist" >&6
  28594. +if test $ac_cv_have_decl_sys_siglist = yes; then
  28595. +
  28596. +cat >>confdefs.h <<_ACEOF
  28597. +#define HAVE_DECL_SYS_SIGLIST 1
  28598. +_ACEOF
  28599. +
  28600. +
  28601. +else
  28602. +  cat >>confdefs.h <<_ACEOF
  28603. +#define HAVE_DECL_SYS_SIGLIST 0
  28604. +_ACEOF
  28605. +
  28606.  
  28607.  fi
  28608.  
  28609. @@ -2810,15 +5600,21 @@
  28610.  fi
  28611.  
  28612.  
  28613. +
  28614. +
  28615.  # mkdir takes a single argument on some systems. 
  28616. -echo $ac_n "checking if mkdir takes one argument""... $ac_c" 1>&6
  28617. -echo "configure:2816: checking if mkdir takes one argument" >&5
  28618. -if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then
  28619. -  echo $ac_n "(cached) $ac_c" 1>&6
  28620. -else
  28621. -  cat > conftest.$ac_ext <<EOF
  28622. -#line 2821 "configure"
  28623. -#include "confdefs.h"
  28624. +echo "$as_me:$LINENO: checking if mkdir takes one argument" >&5
  28625. +echo $ECHO_N "checking if mkdir takes one argument... $ECHO_C" >&6
  28626. +if test "${gcc_cv_mkdir_takes_one_arg+set}" = set; then
  28627. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28628. +else
  28629. +  cat >conftest.$ac_ext <<_ACEOF
  28630. +#line $LINENO "configure"
  28631. +/* confdefs.h.  */
  28632. +_ACEOF
  28633. +cat confdefs.h >>conftest.$ac_ext
  28634. +cat >>conftest.$ac_ext <<_ACEOF
  28635. +/* end confdefs.h.  */
  28636.  
  28637.  #include <sys/types.h>
  28638.  #ifdef HAVE_SYS_STAT_H
  28639. @@ -2830,27 +5626,41 @@
  28640.  #ifdef HAVE_DIRECT_H
  28641.  # include <direct.h>
  28642.  #endif
  28643. -int main() {
  28644. +int
  28645. +main ()
  28646. +{
  28647.  mkdir ("foo", 0);
  28648. -; return 0; }
  28649. -EOF
  28650. -if { (eval echo configure:2838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  28651. -  rm -rf conftest*
  28652. +  ;
  28653. +  return 0;
  28654. +}
  28655. +_ACEOF
  28656. +rm -f conftest.$ac_objext
  28657. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  28658. +  (eval $ac_compile) 2>&5
  28659. +  ac_status=$?
  28660. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28661. +  (exit $ac_status); } &&
  28662. +         { ac_try='test -s conftest.$ac_objext'
  28663. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28664. +  (eval $ac_try) 2>&5
  28665. +  ac_status=$?
  28666. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28667. +  (exit $ac_status); }; }; then
  28668.    gcc_cv_mkdir_takes_one_arg=no
  28669.  else
  28670. -  echo "configure: failed program was:" >&5
  28671. -  cat conftest.$ac_ext >&5
  28672. -  rm -rf conftest*
  28673. -  gcc_cv_mkdir_takes_one_arg=yes
  28674. +  echo "$as_me: failed program was:" >&5
  28675. +sed 's/^/| /' conftest.$ac_ext >&5
  28676. +
  28677. +gcc_cv_mkdir_takes_one_arg=yes
  28678.  fi
  28679. -rm -f conftest*
  28680. +rm -f conftest.$ac_objext conftest.$ac_ext
  28681.  fi
  28682. -
  28683. -echo "$ac_t""$gcc_cv_mkdir_takes_one_arg" 1>&6
  28684. +echo "$as_me:$LINENO: result: $gcc_cv_mkdir_takes_one_arg" >&5
  28685. +echo "${ECHO_T}$gcc_cv_mkdir_takes_one_arg" >&6
  28686.  if test $gcc_cv_mkdir_takes_one_arg = yes ; then
  28687. -  cat >> confdefs.h <<\EOF
  28688. +  cat >>confdefs.h <<\_ACEOF
  28689.  #define MKDIR_TAKES_ONE_ARG 1
  28690. -EOF
  28691. +_ACEOF
  28692.  
  28693.  fi
  28694.  
  28695. @@ -3498,6 +6308,22 @@
  28696.              thread_file='mach'
  28697.          fi
  28698.          ;;
  28699. +        i[34567]86-*-macosx* | \
  28700. +        i[34567]86-*-darwin*)
  28701. +              out_file=i386/openstep.c
  28702. +              xm_file=i386/xm-openstep.h
  28703. +        xm_defines="SYS_SIGLIST_DECLARED"
  28704. +              tm_file=i386/openstep.h
  28705. +              tmake_file=apple/t-apple
  28706. +              xmake_file=apple/x-darwin
  28707. +              extra_objs=machopic.o
  28708. +              extra_passes=cc1obj
  28709. +              fixincludes=Makefile.in # On NeXT, the headers are ok already.
  28710. +              if  x$enable_threads = xyes ; then
  28711. +                      thread_file='mach'
  28712. +              fi
  28713. +              makefile_cond="$makefile_cond next-headers"
  28714. +              ;;
  28715.      i[34567]86-sequent-bsd*)         # 80386 from Sequent
  28716.          use_collect2=yes
  28717.          if test x$gas = xyes
  28718. @@ -4446,6 +7272,14 @@
  28719.          extra_headers=math-68881.h
  28720.          float_format=m68k
  28721.          ;;
  28722. +    m68k-*-amigaos*)
  28723. +                xm_file=m68k/xm-amigaos.h
  28724. +                tm_file=m68k/amigaos.h
  28725. +                tmake_file=m68k/t-amigaos
  28726. +                xmake_file=m68k/x-amigaos
  28727. +                extra_objs=amigaos.o
  28728. +                gnu_ld=yes
  28729. +                ;;
  28730.  
  28731.      m88k-dg-dgux*)
  28732.          case $machine in
  28733. @@ -5069,6 +7903,15 @@
  28734.      romp-*-openbsd*)
  28735.          # Nothing special
  28736.          ;;
  28737. +    powerpc-*-amiga*)
  28738. +        cpu_type=rs6000
  28739. +        tm_file=rs6000/amigaos.h
  28740. +        xm_file=rs6000/xm-amigaos.h
  28741. +        tmake_file=rs6000/t-amigaos
  28742. +        xmake_file=rs6000/x-amigaos
  28743. +        extra_objs=amigaos.o
  28744. +        use_collect2=yes
  28745. +        ;;
  28746.      powerpc-*-openbsd*)
  28747.          tmake_file="${tmake_file} rs6000/t-rs6000 rs6000/t-openbsd"
  28748.          ;;
  28749. @@ -5157,6 +8000,25 @@
  28750.              thread_file='posix'
  28751.          fi
  28752.          ;;
  28753. +    powerpc-*-macosx* | powerpc-*-darwin*)
  28754. +              cpu_type=rs6000
  28755. +              tm_file=rs6000/macosx.h
  28756. +              out_file=rs6000/macosx.c
  28757. +              xm_file=rs6000/xm-macosx.h
  28758. +        xm_defines="SYS_SIGLIST_DECLARED"
  28759. +              tmake_file=rs6000/t-macosx
  28760. +              xmake_file=apple/x-darwin
  28761. +              extra_objs=machopic.o
  28762. +              extra_passes=cc1obj
  28763. +              fixincludes=Makefile.in # On NeXT, the headers are ok already.
  28764. +              makefile_conf="$makefile_cond next-headers"
  28765. +              ;;
  28766. +       powerpc-*-macos*)
  28767. +              out_file=rs6000/macos.c
  28768. +              tm_file=rs6000/macos.h
  28769. +              tmake_file=rs6000/t-macos
  28770. +              fixincludes=Makefile.in
  28771. +              ;;
  28772.          powerpc-wrs-vxworks*)
  28773.                  cpu_type=rs6000
  28774.          xm_file="xm-siglist.h rs6000/xm-sysv4.h"
  28775. @@ -6037,13 +8899,13 @@
  28776.  # Internationalization
  28777.  PACKAGE=gcc
  28778.  VERSION="$gcc_version"
  28779. -cat >> confdefs.h <<EOF
  28780. +cat >>confdefs.h <<_ACEOF
  28781.  #define PACKAGE "$PACKAGE"
  28782. -EOF
  28783. +_ACEOF
  28784.  
  28785. -cat >> confdefs.h <<EOF
  28786. +cat >>confdefs.h <<_ACEOF
  28787.  #define VERSION "$VERSION"
  28788. -EOF
  28789. +_ACEOF
  28790.  
  28791.  
  28792.  
  28793. @@ -6054,280 +8916,408 @@
  28794.  # Check whether --enable-nls or --disable-nls was given.
  28795.  if test "${enable_nls+set}" = set; then
  28796.    enableval="$enable_nls"
  28797. -  :
  28798. +
  28799.  else
  28800.    enable_nls=no
  28801. -fi
  28802. +fi;
  28803.  
  28804.  
  28805. -
  28806. -        echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
  28807. -echo "configure:6066: checking for strerror in -lcposix" >&5
  28808. -ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
  28809. -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  28810. -  echo $ac_n "(cached) $ac_c" 1>&6
  28811. +        echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
  28812. +echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
  28813. +if test "${ac_cv_lib_cposix_strerror+set}" = set; then
  28814. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28815.  else
  28816. -  ac_save_LIBS="$LIBS"
  28817. +  ac_check_lib_save_LIBS=$LIBS
  28818.  LIBS="-lcposix  $LIBS"
  28819. -cat > conftest.$ac_ext <<EOF
  28820. -#line 6074 "configure"
  28821. -#include "confdefs.h"
  28822. +cat >conftest.$ac_ext <<_ACEOF
  28823. +#line $LINENO "configure"
  28824. +/* confdefs.h.  */
  28825. +_ACEOF
  28826. +cat confdefs.h >>conftest.$ac_ext
  28827. +cat >>conftest.$ac_ext <<_ACEOF
  28828. +/* end confdefs.h.  */
  28829. +
  28830.  /* Override any gcc2 internal prototype to avoid an error.  */
  28831. +#ifdef __cplusplus
  28832. +extern "C"
  28833. +#endif
  28834.  /* We use char because int might match the return type of a gcc2
  28835.      builtin and then its argument prototype would still apply.  */
  28836. -char strerror();
  28837. -
  28838. -int main() {
  28839. -strerror()
  28840. -; return 0; }
  28841. -EOF
  28842. -if { (eval echo configure:6085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  28843. -  rm -rf conftest*
  28844. -  eval "ac_cv_lib_$ac_lib_var=yes"
  28845. -else
  28846. -  echo "configure: failed program was:" >&5
  28847. -  cat conftest.$ac_ext >&5
  28848. -  rm -rf conftest*
  28849. -  eval "ac_cv_lib_$ac_lib_var=no"
  28850. -fi
  28851. -rm -f conftest*
  28852. -LIBS="$ac_save_LIBS"
  28853. -
  28854. -fi
  28855. -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  28856. -  echo "$ac_t""yes" 1>&6
  28857. +char strerror ();
  28858. +int
  28859. +main ()
  28860. +{
  28861. +strerror ();
  28862. +  ;
  28863. +  return 0;
  28864. +}
  28865. +_ACEOF
  28866. +rm -f conftest.$ac_objext conftest$ac_exeext
  28867. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  28868. +  (eval $ac_link) 2>&5
  28869. +  ac_status=$?
  28870. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28871. +  (exit $ac_status); } &&
  28872. +         { ac_try='test -s conftest$ac_exeext'
  28873. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  28874. +  (eval $ac_try) 2>&5
  28875. +  ac_status=$?
  28876. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  28877. +  (exit $ac_status); }; }; then
  28878. +  ac_cv_lib_cposix_strerror=yes
  28879. +else
  28880. +  echo "$as_me: failed program was:" >&5
  28881. +sed 's/^/| /' conftest.$ac_ext >&5
  28882. +
  28883. +ac_cv_lib_cposix_strerror=no
  28884. +fi
  28885. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  28886. +LIBS=$ac_check_lib_save_LIBS
  28887. +fi
  28888. +echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
  28889. +echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6
  28890. +if test $ac_cv_lib_cposix_strerror = yes; then
  28891.    LIBS="$LIBS -lcposix"
  28892. -else
  28893. -  echo "$ac_t""no" 1>&6
  28894.  fi
  28895.  
  28896.    
  28897.  
  28898. -echo $ac_n "checking for working const""... $ac_c" 1>&6
  28899. -echo "configure:6108: checking for working const" >&5
  28900. -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
  28901. -  echo $ac_n "(cached) $ac_c" 1>&6
  28902. -else
  28903. -  cat > conftest.$ac_ext <<EOF
  28904. -#line 6113 "configure"
  28905. -#include "confdefs.h"
  28906. -
  28907. -int main() {
  28908. -
  28909. -/* Ultrix mips cc rejects this.  */
  28910. -typedef int charset[2]; const charset x;
  28911. -/* SunOS 4.1.1 cc rejects this.  */
  28912. -char const *const *ccp;
  28913. -char **p;
  28914. -/* NEC SVR4.0.2 mips cc rejects this.  */
  28915. -struct point {int x, y;};
  28916. -static struct point const zero = {0,0};
  28917. -/* AIX XL C 1.02.0.0 rejects this.
  28918. -   It does not let you subtract one const X* pointer from another in an arm
  28919. -   of an if-expression whose if-part is not a constant expression */
  28920. -const char *g = "string";
  28921. -ccp = &g + (g ? g-g : 0);
  28922. -/* HPUX 7.0 cc rejects these. */
  28923. -++ccp;
  28924. -p = (char**) ccp;
  28925. -ccp = (char const *const *) p;
  28926. -{ /* SCO 3.2v4 cc rejects this.  */
  28927. +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
  28928. +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
  28929. +if test "${ac_cv_c_const+set}" = set; then
  28930. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  28931. +else
  28932. +  cat >conftest.$ac_ext <<_ACEOF
  28933. +#line $LINENO "configure"
  28934. +/* confdefs.h.  */
  28935. +_ACEOF
  28936. +cat confdefs.h >>conftest.$ac_ext
  28937. +cat >>conftest.$ac_ext <<_ACEOF
  28938. +/* end confdefs.h.  */
  28939. +
  28940. +int
  28941. +main ()
  28942. +{
  28943. +/* FIXME: Include the comments suggested by Paul. */
  28944. +#ifndef __cplusplus
  28945. +  /* Ultrix mips cc rejects this.  */
  28946. +  typedef int charset[2];
  28947. +  const charset x;
  28948. +  /* SunOS 4.1.1 cc rejects this.  */
  28949. +  char const *const *ccp;
  28950. +  char **p;
  28951. +  /* NEC SVR4.0.2 mips cc rejects this.  */
  28952. +  struct point {int x, y;};
  28953. +  static struct point const zero = {0,0};
  28954. +  /* AIX XL C 1.02.0.0 rejects this.
  28955. +     It does not let you subtract one const X* pointer from another in
  28956. +     an arm of an if-expression whose if-part is not a constant
  28957. +     expression */
  28958. +  const char *g = "string";
  28959. +  ccp = &g + (g ? g-g : 0);
  28960. +  /* HPUX 7.0 cc rejects these. */
  28961. +  ++ccp;
  28962. +  p = (char**) ccp;
  28963. +  ccp = (char const *const *) p;
  28964. +  { /* SCO 3.2v4 cc rejects this.  */
  28965.    char *t;
  28966.    char const *s = 0 ? (char *) 0 : (char const *) 0;
  28967.  
  28968.    *t++ = 0;
  28969. -}
  28970. -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
  28971. +  }
  28972. +  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
  28973.    int x[] = {25, 17};
  28974.    const int *foo = &x[0];
  28975.    ++foo;
  28976. -}
  28977. -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
  28978. +  }
  28979. +  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
  28980.    typedef const int *iptr;
  28981.    iptr p = 0;
  28982.    ++p;
  28983. -}
  28984. -{ /* AIX XL C 1.02.0.0 rejects this saying
  28985. +  }
  28986. +  { /* AIX XL C 1.02.0.0 rejects this saying
  28987.       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
  28988.    struct s { int j; const int *ap[3]; };
  28989.    struct s *b; b->j = 5;
  28990. -}
  28991. -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
  28992. +  }
  28993. +  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
  28994.    const int foo = 10;
  28995. -}
  28996. +  }
  28997. +#endif
  28998.  
  28999. -; return 0; }
  29000. -EOF
  29001. -if { (eval echo configure:6162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  29002. -  rm -rf conftest*
  29003. +  ;
  29004. +  return 0;
  29005. +}
  29006. +_ACEOF
  29007. +rm -f conftest.$ac_objext
  29008. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  29009. +  (eval $ac_compile) 2>&5
  29010. +  ac_status=$?
  29011. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29012. +  (exit $ac_status); } &&
  29013. +         { ac_try='test -s conftest.$ac_objext'
  29014. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29015. +  (eval $ac_try) 2>&5
  29016. +  ac_status=$?
  29017. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29018. +  (exit $ac_status); }; }; then
  29019.    ac_cv_c_const=yes
  29020.  else
  29021. -  echo "configure: failed program was:" >&5
  29022. -  cat conftest.$ac_ext >&5
  29023. -  rm -rf conftest*
  29024. -  ac_cv_c_const=no
  29025. +  echo "$as_me: failed program was:" >&5
  29026. +sed 's/^/| /' conftest.$ac_ext >&5
  29027. +
  29028. +ac_cv_c_const=no
  29029.  fi
  29030. -rm -f conftest*
  29031. +rm -f conftest.$ac_objext conftest.$ac_ext
  29032.  fi
  29033. -
  29034. -echo "$ac_t""$ac_cv_c_const" 1>&6
  29035. +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
  29036. +echo "${ECHO_T}$ac_cv_c_const" >&6
  29037.  if test $ac_cv_c_const = no; then
  29038. -  cat >> confdefs.h <<\EOF
  29039. +
  29040. +cat >>confdefs.h <<\_ACEOF
  29041.  #define const 
  29042. -EOF
  29043. +_ACEOF
  29044.  
  29045.  fi
  29046.  
  29047. -echo $ac_n "checking for inline""... $ac_c" 1>&6
  29048. -echo "configure:6183: checking for inline" >&5
  29049. -if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
  29050. -  echo $ac_n "(cached) $ac_c" 1>&6
  29051. +echo "$as_me:$LINENO: checking for inline" >&5
  29052. +echo $ECHO_N "checking for inline... $ECHO_C" >&6
  29053. +if test "${ac_cv_c_inline+set}" = set; then
  29054. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29055.  else
  29056.    ac_cv_c_inline=no
  29057.  for ac_kw in inline __inline__ __inline; do
  29058. -  cat > conftest.$ac_ext <<EOF
  29059. -#line 6190 "configure"
  29060. -#include "confdefs.h"
  29061. -
  29062. -int main() {
  29063. -} $ac_kw foo() {
  29064. -; return 0; }
  29065. -EOF
  29066. -if { (eval echo configure:6197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  29067. -  rm -rf conftest*
  29068. +  cat >conftest.$ac_ext <<_ACEOF
  29069. +#line $LINENO "configure"
  29070. +/* confdefs.h.  */
  29071. +_ACEOF
  29072. +cat confdefs.h >>conftest.$ac_ext
  29073. +cat >>conftest.$ac_ext <<_ACEOF
  29074. +/* end confdefs.h.  */
  29075. +#ifndef __cplusplus
  29076. +typedef int foo_t;
  29077. +static $ac_kw foo_t static_foo () {return 0; }
  29078. +$ac_kw foo_t foo () {return 0; }
  29079. +#endif
  29080. +
  29081. +_ACEOF
  29082. +rm -f conftest.$ac_objext
  29083. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  29084. +  (eval $ac_compile) 2>&5
  29085. +  ac_status=$?
  29086. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29087. +  (exit $ac_status); } &&
  29088. +         { ac_try='test -s conftest.$ac_objext'
  29089. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29090. +  (eval $ac_try) 2>&5
  29091. +  ac_status=$?
  29092. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29093. +  (exit $ac_status); }; }; then
  29094.    ac_cv_c_inline=$ac_kw; break
  29095.  else
  29096. -  echo "configure: failed program was:" >&5
  29097. -  cat conftest.$ac_ext >&5
  29098. +  echo "$as_me: failed program was:" >&5
  29099. +sed 's/^/| /' conftest.$ac_ext >&5
  29100. +
  29101.  fi
  29102. -rm -f conftest*
  29103. +rm -f conftest.$ac_objext conftest.$ac_ext
  29104.  done
  29105.  
  29106.  fi
  29107. -
  29108. -echo "$ac_t""$ac_cv_c_inline" 1>&6
  29109. -case "$ac_cv_c_inline" in
  29110. +echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
  29111. +echo "${ECHO_T}$ac_cv_c_inline" >&6
  29112. +case $ac_cv_c_inline in
  29113.    inline | yes) ;;
  29114. -  no) cat >> confdefs.h <<\EOF
  29115. +  no)
  29116. +cat >>confdefs.h <<\_ACEOF
  29117.  #define inline 
  29118. -EOF
  29119. +_ACEOF
  29120.   ;;
  29121. -  *)  cat >> confdefs.h <<EOF
  29122. +  *)  cat >>confdefs.h <<_ACEOF
  29123.  #define inline $ac_cv_c_inline
  29124. -EOF
  29125. +_ACEOF
  29126.   ;;
  29127.  esac
  29128.  
  29129. -echo $ac_n "checking for off_t""... $ac_c" 1>&6
  29130. -echo "configure:6223: checking for off_t" >&5
  29131. -if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
  29132. -  echo $ac_n "(cached) $ac_c" 1>&6
  29133. -else
  29134. -  cat > conftest.$ac_ext <<EOF
  29135. -#line 6228 "configure"
  29136. -#include "confdefs.h"
  29137. -#include <sys/types.h>
  29138. -#if STDC_HEADERS
  29139. -#include <stdlib.h>
  29140. -#include <stddef.h>
  29141. -#endif
  29142. -EOF
  29143. -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  29144. -  egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
  29145. -  rm -rf conftest*
  29146. +echo "$as_me:$LINENO: checking for off_t" >&5
  29147. +echo $ECHO_N "checking for off_t... $ECHO_C" >&6
  29148. +if test "${ac_cv_type_off_t+set}" = set; then
  29149. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29150. +else
  29151. +  cat >conftest.$ac_ext <<_ACEOF
  29152. +#line $LINENO "configure"
  29153. +/* confdefs.h.  */
  29154. +_ACEOF
  29155. +cat confdefs.h >>conftest.$ac_ext
  29156. +cat >>conftest.$ac_ext <<_ACEOF
  29157. +/* end confdefs.h.  */
  29158. +$ac_includes_default
  29159. +int
  29160. +main ()
  29161. +{
  29162. +if ((off_t *) 0)
  29163. +  return 0;
  29164. +if (sizeof (off_t))
  29165. +  return 0;
  29166. +  ;
  29167. +  return 0;
  29168. +}
  29169. +_ACEOF
  29170. +rm -f conftest.$ac_objext
  29171. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  29172. +  (eval $ac_compile) 2>&5
  29173. +  ac_status=$?
  29174. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29175. +  (exit $ac_status); } &&
  29176. +         { ac_try='test -s conftest.$ac_objext'
  29177. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29178. +  (eval $ac_try) 2>&5
  29179. +  ac_status=$?
  29180. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29181. +  (exit $ac_status); }; }; then
  29182.    ac_cv_type_off_t=yes
  29183.  else
  29184. -  rm -rf conftest*
  29185. -  ac_cv_type_off_t=no
  29186. -fi
  29187. -rm -f conftest*
  29188. +  echo "$as_me: failed program was:" >&5
  29189. +sed 's/^/| /' conftest.$ac_ext >&5
  29190.  
  29191. +ac_cv_type_off_t=no
  29192.  fi
  29193. -echo "$ac_t""$ac_cv_type_off_t" 1>&6
  29194. -if test $ac_cv_type_off_t = no; then
  29195. -  cat >> confdefs.h <<\EOF
  29196. +rm -f conftest.$ac_objext conftest.$ac_ext
  29197. +fi
  29198. +echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
  29199. +echo "${ECHO_T}$ac_cv_type_off_t" >&6
  29200. +if test $ac_cv_type_off_t = yes; then
  29201. +  :
  29202. +else
  29203. +
  29204. +cat >>confdefs.h <<_ACEOF
  29205.  #define off_t long
  29206. -EOF
  29207. +_ACEOF
  29208.  
  29209.  fi
  29210.  
  29211. -echo $ac_n "checking for size_t""... $ac_c" 1>&6
  29212. -echo "configure:6256: checking for size_t" >&5
  29213. -if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
  29214. -  echo $ac_n "(cached) $ac_c" 1>&6
  29215. -else
  29216. -  cat > conftest.$ac_ext <<EOF
  29217. -#line 6261 "configure"
  29218. -#include "confdefs.h"
  29219. -#include <sys/types.h>
  29220. -#if STDC_HEADERS
  29221. -#include <stdlib.h>
  29222. -#include <stddef.h>
  29223. -#endif
  29224. -EOF
  29225. -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  29226. -  egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
  29227. -  rm -rf conftest*
  29228. +echo "$as_me:$LINENO: checking for size_t" >&5
  29229. +echo $ECHO_N "checking for size_t... $ECHO_C" >&6
  29230. +if test "${ac_cv_type_size_t+set}" = set; then
  29231. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29232. +else
  29233. +  cat >conftest.$ac_ext <<_ACEOF
  29234. +#line $LINENO "configure"
  29235. +/* confdefs.h.  */
  29236. +_ACEOF
  29237. +cat confdefs.h >>conftest.$ac_ext
  29238. +cat >>conftest.$ac_ext <<_ACEOF
  29239. +/* end confdefs.h.  */
  29240. +$ac_includes_default
  29241. +int
  29242. +main ()
  29243. +{
  29244. +if ((size_t *) 0)
  29245. +  return 0;
  29246. +if (sizeof (size_t))
  29247. +  return 0;
  29248. +  ;
  29249. +  return 0;
  29250. +}
  29251. +_ACEOF
  29252. +rm -f conftest.$ac_objext
  29253. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  29254. +  (eval $ac_compile) 2>&5
  29255. +  ac_status=$?
  29256. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29257. +  (exit $ac_status); } &&
  29258. +         { ac_try='test -s conftest.$ac_objext'
  29259. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29260. +  (eval $ac_try) 2>&5
  29261. +  ac_status=$?
  29262. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29263. +  (exit $ac_status); }; }; then
  29264.    ac_cv_type_size_t=yes
  29265.  else
  29266. -  rm -rf conftest*
  29267. -  ac_cv_type_size_t=no
  29268. -fi
  29269. -rm -f conftest*
  29270. +  echo "$as_me: failed program was:" >&5
  29271. +sed 's/^/| /' conftest.$ac_ext >&5
  29272.  
  29273. +ac_cv_type_size_t=no
  29274.  fi
  29275. -echo "$ac_t""$ac_cv_type_size_t" 1>&6
  29276. -if test $ac_cv_type_size_t = no; then
  29277. -  cat >> confdefs.h <<\EOF
  29278. +rm -f conftest.$ac_objext conftest.$ac_ext
  29279. +fi
  29280. +echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
  29281. +echo "${ECHO_T}$ac_cv_type_size_t" >&6
  29282. +if test $ac_cv_type_size_t = yes; then
  29283. +  :
  29284. +else
  29285. +
  29286. +cat >>confdefs.h <<_ACEOF
  29287.  #define size_t unsigned
  29288. -EOF
  29289. +_ACEOF
  29290.  
  29291.  fi
  29292.  
  29293.  # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  29294.  # for constant arguments.  Useless!
  29295. -echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
  29296. -echo "configure:6291: checking for working alloca.h" >&5
  29297. -if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
  29298. -  echo $ac_n "(cached) $ac_c" 1>&6
  29299. -else
  29300. -  cat > conftest.$ac_ext <<EOF
  29301. -#line 6296 "configure"
  29302. -#include "confdefs.h"
  29303. +echo "$as_me:$LINENO: checking for working alloca.h" >&5
  29304. +echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
  29305. +if test "${ac_cv_working_alloca_h+set}" = set; then
  29306. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29307. +else
  29308. +  cat >conftest.$ac_ext <<_ACEOF
  29309. +#line $LINENO "configure"
  29310. +/* confdefs.h.  */
  29311. +_ACEOF
  29312. +cat confdefs.h >>conftest.$ac_ext
  29313. +cat >>conftest.$ac_ext <<_ACEOF
  29314. +/* end confdefs.h.  */
  29315.  #include <alloca.h>
  29316. -int main() {
  29317. -char *p = alloca(2 * sizeof(int));
  29318. -; return 0; }
  29319. -EOF
  29320. -if { (eval echo configure:6303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  29321. -  rm -rf conftest*
  29322. -  ac_cv_header_alloca_h=yes
  29323. -else
  29324. -  echo "configure: failed program was:" >&5
  29325. -  cat conftest.$ac_ext >&5
  29326. -  rm -rf conftest*
  29327. -  ac_cv_header_alloca_h=no
  29328. -fi
  29329. -rm -f conftest*
  29330. -fi
  29331. +int
  29332. +main ()
  29333. +{
  29334. +char *p = (char *) alloca (2 * sizeof (int));
  29335. +  ;
  29336. +  return 0;
  29337. +}
  29338. +_ACEOF
  29339. +rm -f conftest.$ac_objext conftest$ac_exeext
  29340. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  29341. +  (eval $ac_link) 2>&5
  29342. +  ac_status=$?
  29343. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29344. +  (exit $ac_status); } &&
  29345. +         { ac_try='test -s conftest$ac_exeext'
  29346. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29347. +  (eval $ac_try) 2>&5
  29348. +  ac_status=$?
  29349. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29350. +  (exit $ac_status); }; }; then
  29351. +  ac_cv_working_alloca_h=yes
  29352. +else
  29353. +  echo "$as_me: failed program was:" >&5
  29354. +sed 's/^/| /' conftest.$ac_ext >&5
  29355. +
  29356. +ac_cv_working_alloca_h=no
  29357. +fi
  29358. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  29359. +fi
  29360. +echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
  29361. +echo "${ECHO_T}$ac_cv_working_alloca_h" >&6
  29362. +if test $ac_cv_working_alloca_h = yes; then
  29363.  
  29364. -echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
  29365. -if test $ac_cv_header_alloca_h = yes; then
  29366. -  cat >> confdefs.h <<\EOF
  29367. +cat >>confdefs.h <<\_ACEOF
  29368.  #define HAVE_ALLOCA_H 1
  29369. -EOF
  29370. +_ACEOF
  29371.  
  29372.  fi
  29373.  
  29374. -echo $ac_n "checking for alloca""... $ac_c" 1>&6
  29375. -echo "configure:6324: checking for alloca" >&5
  29376. -if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
  29377. -  echo $ac_n "(cached) $ac_c" 1>&6
  29378. -else
  29379. -  cat > conftest.$ac_ext <<EOF
  29380. -#line 6329 "configure"
  29381. -#include "confdefs.h"
  29382. -
  29383. +echo "$as_me:$LINENO: checking for alloca" >&5
  29384. +echo $ECHO_N "checking for alloca... $ECHO_C" >&6
  29385. +if test "${ac_cv_func_alloca_works+set}" = set; then
  29386. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29387. +else
  29388. +  cat >conftest.$ac_ext <<_ACEOF
  29389. +#line $LINENO "configure"
  29390. +/* confdefs.h.  */
  29391. +_ACEOF
  29392. +cat confdefs.h >>conftest.$ac_ext
  29393. +cat >>conftest.$ac_ext <<_ACEOF
  29394. +/* end confdefs.h.  */
  29395.  #ifdef __GNUC__
  29396.  # define alloca __builtin_alloca
  29397.  #else
  29398. @@ -6349,137 +9339,190 @@
  29399.  # endif
  29400.  #endif
  29401.  
  29402. -int main() {
  29403. -char *p = (char *) alloca(1);
  29404. -; return 0; }
  29405. -EOF
  29406. -if { (eval echo configure:6357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  29407. -  rm -rf conftest*
  29408. +int
  29409. +main ()
  29410. +{
  29411. +char *p = (char *) alloca (1);
  29412. +  ;
  29413. +  return 0;
  29414. +}
  29415. +_ACEOF
  29416. +rm -f conftest.$ac_objext conftest$ac_exeext
  29417. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  29418. +  (eval $ac_link) 2>&5
  29419. +  ac_status=$?
  29420. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29421. +  (exit $ac_status); } &&
  29422. +         { ac_try='test -s conftest$ac_exeext'
  29423. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29424. +  (eval $ac_try) 2>&5
  29425. +  ac_status=$?
  29426. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29427. +  (exit $ac_status); }; }; then
  29428.    ac_cv_func_alloca_works=yes
  29429.  else
  29430. -  echo "configure: failed program was:" >&5
  29431. -  cat conftest.$ac_ext >&5
  29432. -  rm -rf conftest*
  29433. -  ac_cv_func_alloca_works=no
  29434. +  echo "$as_me: failed program was:" >&5
  29435. +sed 's/^/| /' conftest.$ac_ext >&5
  29436. +
  29437. +ac_cv_func_alloca_works=no
  29438.  fi
  29439. -rm -f conftest*
  29440. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  29441.  fi
  29442. +echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
  29443. +echo "${ECHO_T}$ac_cv_func_alloca_works" >&6
  29444.  
  29445. -echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
  29446.  if test $ac_cv_func_alloca_works = yes; then
  29447. -  cat >> confdefs.h <<\EOF
  29448. -#define HAVE_ALLOCA 1
  29449. -EOF
  29450.  
  29451. -fi
  29452. +cat >>confdefs.h <<\_ACEOF
  29453. +#define HAVE_ALLOCA 1
  29454. +_ACEOF
  29455.  
  29456. -if test $ac_cv_func_alloca_works = no; then
  29457. +else
  29458.    # The SVR3 libPW and SVR4 libucb both contain incompatible functions
  29459. -  # that cause trouble.  Some versions do not even contain alloca or
  29460. -  # contain a buggy version.  If you still want to use their alloca,
  29461. -  # use ar to extract alloca.o from them instead of compiling alloca.c.
  29462. -  ALLOCA=alloca.${ac_objext}
  29463. -  cat >> confdefs.h <<\EOF
  29464. +# that cause trouble.  Some versions do not even contain alloca or
  29465. +# contain a buggy version.  If you still want to use their alloca,
  29466. +# use ar to extract alloca.o from them instead of compiling alloca.c.
  29467. +
  29468. +ALLOCA=alloca.$ac_objext
  29469. +
  29470. +cat >>confdefs.h <<\_ACEOF
  29471.  #define C_ALLOCA 1
  29472. -EOF
  29473. +_ACEOF
  29474.  
  29475.  
  29476. -echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
  29477. -echo "configure:6389: checking whether alloca needs Cray hooks" >&5
  29478. -if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
  29479. -  echo $ac_n "(cached) $ac_c" 1>&6
  29480. -else
  29481. -  cat > conftest.$ac_ext <<EOF
  29482. -#line 6394 "configure"
  29483. -#include "confdefs.h"
  29484. +echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
  29485. +echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
  29486. +if test "${ac_cv_os_cray+set}" = set; then
  29487. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29488. +else
  29489. +  cat >conftest.$ac_ext <<_ACEOF
  29490. +#line $LINENO "configure"
  29491. +/* confdefs.h.  */
  29492. +_ACEOF
  29493. +cat confdefs.h >>conftest.$ac_ext
  29494. +cat >>conftest.$ac_ext <<_ACEOF
  29495. +/* end confdefs.h.  */
  29496.  #if defined(CRAY) && ! defined(CRAY2)
  29497.  webecray
  29498.  #else
  29499.  wenotbecray
  29500.  #endif
  29501.  
  29502. -EOF
  29503. +_ACEOF
  29504.  if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  29505. -  egrep "webecray" >/dev/null 2>&1; then
  29506. -  rm -rf conftest*
  29507. +  $EGREP "webecray" >/dev/null 2>&1; then
  29508.    ac_cv_os_cray=yes
  29509.  else
  29510. -  rm -rf conftest*
  29511.    ac_cv_os_cray=no
  29512.  fi
  29513.  rm -f conftest*
  29514.  
  29515.  fi
  29516. -
  29517. -echo "$ac_t""$ac_cv_os_cray" 1>&6
  29518. +echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
  29519. +echo "${ECHO_T}$ac_cv_os_cray" >&6
  29520.  if test $ac_cv_os_cray = yes; then
  29521. -for ac_func in _getb67 GETB67 getb67; do
  29522. -  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  29523. -echo "configure:6419: checking for $ac_func" >&5
  29524. -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  29525. -  echo $ac_n "(cached) $ac_c" 1>&6
  29526. -else
  29527. -  cat > conftest.$ac_ext <<EOF
  29528. -#line 6424 "configure"
  29529. -#include "confdefs.h"
  29530. +  for ac_func in _getb67 GETB67 getb67; do
  29531. +    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  29532. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  29533. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  29534. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  29535. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29536. +else
  29537. +  cat >conftest.$ac_ext <<_ACEOF
  29538. +#line $LINENO "configure"
  29539. +/* confdefs.h.  */
  29540. +_ACEOF
  29541. +cat confdefs.h >>conftest.$ac_ext
  29542. +cat >>conftest.$ac_ext <<_ACEOF
  29543. +/* end confdefs.h.  */
  29544.  /* System header to define __stub macros and hopefully few prototypes,
  29545. -    which can conflict with char $ac_func(); below.  */
  29546. -#include <assert.h>
  29547. +    which can conflict with char $ac_func (); below.
  29548. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  29549. +    <limits.h> exists even on freestanding compilers.  */
  29550. +#ifdef __STDC__
  29551. +# include <limits.h>
  29552. +#else
  29553. +# include <assert.h>
  29554. +#endif
  29555.  /* Override any gcc2 internal prototype to avoid an error.  */
  29556. +#ifdef __cplusplus
  29557. +extern "C"
  29558. +{
  29559. +#endif
  29560.  /* We use char because int might match the return type of a gcc2
  29561.      builtin and then its argument prototype would still apply.  */
  29562. -char $ac_func();
  29563. -
  29564. -int main() {
  29565. -
  29566. +char $ac_func ();
  29567.  /* The GNU C library defines this for functions which it implements
  29568.      to always fail with ENOSYS.  Some functions are actually named
  29569.      something starting with __ and the normal name is an alias.  */
  29570.  #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  29571.  choke me
  29572.  #else
  29573. -$ac_func();
  29574. +char (*f) () = $ac_func;
  29575. +#endif
  29576. +#ifdef __cplusplus
  29577. +}
  29578.  #endif
  29579.  
  29580. -; return 0; }
  29581. -EOF
  29582. -if { (eval echo configure:6447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  29583. -  rm -rf conftest*
  29584. -  eval "ac_cv_func_$ac_func=yes"
  29585. -else
  29586. -  echo "configure: failed program was:" >&5
  29587. -  cat conftest.$ac_ext >&5
  29588. -  rm -rf conftest*
  29589. -  eval "ac_cv_func_$ac_func=no"
  29590. -fi
  29591. -rm -f conftest*
  29592. -fi
  29593. +int
  29594. +main ()
  29595. +{
  29596. +return f != $ac_func;
  29597. +  ;
  29598. +  return 0;
  29599. +}
  29600. +_ACEOF
  29601. +rm -f conftest.$ac_objext conftest$ac_exeext
  29602. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  29603. +  (eval $ac_link) 2>&5
  29604. +  ac_status=$?
  29605. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29606. +  (exit $ac_status); } &&
  29607. +         { ac_try='test -s conftest$ac_exeext'
  29608. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29609. +  (eval $ac_try) 2>&5
  29610. +  ac_status=$?
  29611. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29612. +  (exit $ac_status); }; }; then
  29613. +  eval "$as_ac_var=yes"
  29614. +else
  29615. +  echo "$as_me: failed program was:" >&5
  29616. +sed 's/^/| /' conftest.$ac_ext >&5
  29617. +
  29618. +eval "$as_ac_var=no"
  29619. +fi
  29620. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  29621. +fi
  29622. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  29623. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  29624. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  29625.  
  29626. -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  29627. -  echo "$ac_t""yes" 1>&6
  29628. -  cat >> confdefs.h <<EOF
  29629. +cat >>confdefs.h <<_ACEOF
  29630.  #define CRAY_STACKSEG_END $ac_func
  29631. -EOF
  29632. +_ACEOF
  29633.  
  29634.    break
  29635. -else
  29636. -  echo "$ac_t""no" 1>&6
  29637.  fi
  29638.  
  29639. -done
  29640. +  done
  29641.  fi
  29642.  
  29643. -echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
  29644. -echo "configure:6474: checking stack direction for C alloca" >&5
  29645. -if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
  29646. -  echo $ac_n "(cached) $ac_c" 1>&6
  29647. +echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
  29648. +echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
  29649. +if test "${ac_cv_c_stack_direction+set}" = set; then
  29650. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29651.  else
  29652.    if test "$cross_compiling" = yes; then
  29653.    ac_cv_c_stack_direction=0
  29654.  else
  29655. -  cat > conftest.$ac_ext <<EOF
  29656. -#line 6482 "configure"
  29657. -#include "confdefs.h"
  29658. +  cat >conftest.$ac_ext <<_ACEOF
  29659. +#line $LINENO "configure"
  29660. +/* confdefs.h.  */
  29661. +_ACEOF
  29662. +cat confdefs.h >>conftest.$ac_ext
  29663. +cat >>conftest.$ac_ext <<_ACEOF
  29664. +/* end confdefs.h.  */
  29665. +int
  29666.  find_stack_direction ()
  29667.  {
  29668.    static char *addr = 0;
  29669. @@ -6492,138 +9535,291 @@
  29670.    else
  29671.      return (&dummy > addr) ? 1 : -1;
  29672.  }
  29673. +
  29674. +int
  29675.  main ()
  29676.  {
  29677. -  exit (find_stack_direction() < 0);
  29678. +  exit (find_stack_direction () < 0);
  29679.  }
  29680. -EOF
  29681. -if { (eval echo configure:6501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  29682. -then
  29683. +_ACEOF
  29684. +rm -f conftest$ac_exeext
  29685. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  29686. +  (eval $ac_link) 2>&5
  29687. +  ac_status=$?
  29688. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29689. +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  29690. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29691. +  (eval $ac_try) 2>&5
  29692. +  ac_status=$?
  29693. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29694. +  (exit $ac_status); }; }; then
  29695.    ac_cv_c_stack_direction=1
  29696.  else
  29697. -  echo "configure: failed program was:" >&5
  29698. -  cat conftest.$ac_ext >&5
  29699. -  rm -fr conftest*
  29700. -  ac_cv_c_stack_direction=-1
  29701. +  echo "$as_me: program exited with status $ac_status" >&5
  29702. +echo "$as_me: failed program was:" >&5
  29703. +sed 's/^/| /' conftest.$ac_ext >&5
  29704. +
  29705. +( exit $ac_status )
  29706. +ac_cv_c_stack_direction=-1
  29707.  fi
  29708. -rm -fr conftest*
  29709. +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  29710.  fi
  29711. -
  29712.  fi
  29713. +echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
  29714. +echo "${ECHO_T}$ac_cv_c_stack_direction" >&6
  29715.  
  29716. -echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
  29717. -cat >> confdefs.h <<EOF
  29718. +cat >>confdefs.h <<_ACEOF
  29719.  #define STACK_DIRECTION $ac_cv_c_stack_direction
  29720. -EOF
  29721. +_ACEOF
  29722. +
  29723.  
  29724.  fi
  29725.  
  29726. -for ac_hdr in unistd.h
  29727. +
  29728. +
  29729. +for ac_header in stdlib.h unistd.h
  29730.  do
  29731. -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  29732. -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  29733. -echo "configure:6526: checking for $ac_hdr" >&5
  29734. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  29735. -  echo $ac_n "(cached) $ac_c" 1>&6
  29736. -else
  29737. -  cat > conftest.$ac_ext <<EOF
  29738. -#line 6531 "configure"
  29739. -#include "confdefs.h"
  29740. -#include <$ac_hdr>
  29741. -EOF
  29742. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  29743. -{ (eval echo configure:6536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  29744. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  29745. -if test -z "$ac_err"; then
  29746. -  rm -rf conftest*
  29747. -  eval "ac_cv_header_$ac_safe=yes"
  29748. -else
  29749. -  echo "$ac_err" >&5
  29750. -  echo "configure: failed program was:" >&5
  29751. -  cat conftest.$ac_ext >&5
  29752. -  rm -rf conftest*
  29753. -  eval "ac_cv_header_$ac_safe=no"
  29754. +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  29755. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  29756. +  echo "$as_me:$LINENO: checking for $ac_header" >&5
  29757. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  29758. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  29759. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29760. +fi
  29761. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  29762. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  29763. +else
  29764. +  # Is the header compilable?
  29765. +echo "$as_me:$LINENO: checking $ac_header usability" >&5
  29766. +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  29767. +cat >conftest.$ac_ext <<_ACEOF
  29768. +#line $LINENO "configure"
  29769. +/* confdefs.h.  */
  29770. +_ACEOF
  29771. +cat confdefs.h >>conftest.$ac_ext
  29772. +cat >>conftest.$ac_ext <<_ACEOF
  29773. +/* end confdefs.h.  */
  29774. +$ac_includes_default
  29775. +#include <$ac_header>
  29776. +_ACEOF
  29777. +rm -f conftest.$ac_objext
  29778. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  29779. +  (eval $ac_compile) 2>&5
  29780. +  ac_status=$?
  29781. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29782. +  (exit $ac_status); } &&
  29783. +         { ac_try='test -s conftest.$ac_objext'
  29784. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  29785. +  (eval $ac_try) 2>&5
  29786. +  ac_status=$?
  29787. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29788. +  (exit $ac_status); }; }; then
  29789. +  ac_header_compiler=yes
  29790. +else
  29791. +  echo "$as_me: failed program was:" >&5
  29792. +sed 's/^/| /' conftest.$ac_ext >&5
  29793. +
  29794. +ac_header_compiler=no
  29795. +fi
  29796. +rm -f conftest.$ac_objext conftest.$ac_ext
  29797. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  29798. +echo "${ECHO_T}$ac_header_compiler" >&6
  29799. +
  29800. +# Is the header present?
  29801. +echo "$as_me:$LINENO: checking $ac_header presence" >&5
  29802. +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  29803. +cat >conftest.$ac_ext <<_ACEOF
  29804. +#line $LINENO "configure"
  29805. +/* confdefs.h.  */
  29806. +_ACEOF
  29807. +cat confdefs.h >>conftest.$ac_ext
  29808. +cat >>conftest.$ac_ext <<_ACEOF
  29809. +/* end confdefs.h.  */
  29810. +#include <$ac_header>
  29811. +_ACEOF
  29812. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  29813. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  29814. +  ac_status=$?
  29815. +  grep -v '^ *+' conftest.er1 >conftest.err
  29816. +  rm -f conftest.er1
  29817. +  cat conftest.err >&5
  29818. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29819. +  (exit $ac_status); } >/dev/null; then
  29820. +  if test -s conftest.err; then
  29821. +    ac_cpp_err=$ac_c_preproc_warn_flag
  29822. +  else
  29823. +    ac_cpp_err=
  29824. +  fi
  29825. +else
  29826. +  ac_cpp_err=yes
  29827. +fi
  29828. +if test -z "$ac_cpp_err"; then
  29829. +  ac_header_preproc=yes
  29830. +else
  29831. +  echo "$as_me: failed program was:" >&5
  29832. +sed 's/^/| /' conftest.$ac_ext >&5
  29833. +
  29834. +  ac_header_preproc=no
  29835. +fi
  29836. +rm -f conftest.err conftest.$ac_ext
  29837. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  29838. +echo "${ECHO_T}$ac_header_preproc" >&6
  29839. +
  29840. +# So?  What about this header?
  29841. +case $ac_header_compiler:$ac_header_preproc in
  29842. +  yes:no )
  29843. +    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  29844. +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
  29845. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  29846. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  29847. +    (
  29848. +      cat <<\_ASBOX
  29849. +## ------------------------------------ ##
  29850. +## Report this to bug-autoconf@gnu.org. ##
  29851. +## ------------------------------------ ##
  29852. +_ASBOX
  29853. +    ) |
  29854. +      sed "s/^/$as_me: WARNING:     /" >&2
  29855. +    ;;
  29856. +  no:yes )
  29857. +    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  29858. +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
  29859. +    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
  29860. +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
  29861. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  29862. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  29863. +    (
  29864. +      cat <<\_ASBOX
  29865. +## ------------------------------------ ##
  29866. +## Report this to bug-autoconf@gnu.org. ##
  29867. +## ------------------------------------ ##
  29868. +_ASBOX
  29869. +    ) |
  29870. +      sed "s/^/$as_me: WARNING:     /" >&2
  29871. +    ;;
  29872. +esac
  29873. +echo "$as_me:$LINENO: checking for $ac_header" >&5
  29874. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  29875. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  29876. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29877. +else
  29878. +  eval "$as_ac_Header=$ac_header_preproc"
  29879.  fi
  29880. -rm -f conftest*
  29881. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  29882. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  29883. +
  29884.  fi
  29885. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  29886. -  echo "$ac_t""yes" 1>&6
  29887. -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  29888. -  cat >> confdefs.h <<EOF
  29889. -#define $ac_tr_hdr 1
  29890. -EOF
  29891. +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  29892. +  cat >>confdefs.h <<_ACEOF
  29893. +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  29894. +_ACEOF
  29895.   
  29896. -else
  29897. -  echo "$ac_t""no" 1>&6
  29898.  fi
  29899. +
  29900.  done
  29901.  
  29902. +
  29903.  for ac_func in getpagesize
  29904.  do
  29905. -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  29906. -echo "configure:6565: checking for $ac_func" >&5
  29907. -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  29908. -  echo $ac_n "(cached) $ac_c" 1>&6
  29909. -else
  29910. -  cat > conftest.$ac_ext <<EOF
  29911. -#line 6570 "configure"
  29912. -#include "confdefs.h"
  29913. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  29914. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  29915. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  29916. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  29917. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  29918. +else
  29919. +  cat >conftest.$ac_ext <<_ACEOF
  29920. +#line $LINENO "configure"
  29921. +/* confdefs.h.  */
  29922. +_ACEOF
  29923. +cat confdefs.h >>conftest.$ac_ext
  29924. +cat >>conftest.$ac_ext <<_ACEOF
  29925. +/* end confdefs.h.  */
  29926.  /* System header to define __stub macros and hopefully few prototypes,
  29927. -    which can conflict with char $ac_func(); below.  */
  29928. -#include <assert.h>
  29929. +    which can conflict with char $ac_func (); below.
  29930. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  29931. +    <limits.h> exists even on freestanding compilers.  */
  29932. +#ifdef __STDC__
  29933. +# include <limits.h>
  29934. +#else
  29935. +# include <assert.h>
  29936. +#endif
  29937.  /* Override any gcc2 internal prototype to avoid an error.  */
  29938. +#ifdef __cplusplus
  29939. +extern "C"
  29940. +{
  29941. +#endif
  29942.  /* We use char because int might match the return type of a gcc2
  29943.      builtin and then its argument prototype would still apply.  */
  29944. -char $ac_func();
  29945. -
  29946. -int main() {
  29947. -
  29948. +char $ac_func ();
  29949.  /* The GNU C library defines this for functions which it implements
  29950.      to always fail with ENOSYS.  Some functions are actually named
  29951.      something starting with __ and the normal name is an alias.  */
  29952.  #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  29953.  choke me
  29954.  #else
  29955. -$ac_func();
  29956. +char (*f) () = $ac_func;
  29957. +#endif
  29958. +#ifdef __cplusplus
  29959. +}
  29960.  #endif
  29961.  
  29962. -; return 0; }
  29963. -EOF
  29964. -if { (eval echo configure:6593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  29965. -  rm -rf conftest*
  29966. -  eval "ac_cv_func_$ac_func=yes"
  29967. -else
  29968. -  echo "configure: failed program was:" >&5
  29969. -  cat conftest.$ac_ext >&5
  29970. -  rm -rf conftest*
  29971. -  eval "ac_cv_func_$ac_func=no"
  29972. -fi
  29973. -rm -f conftest*
  29974. -fi
  29975. -
  29976. -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  29977. -  echo "$ac_t""yes" 1>&6
  29978. -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  29979. -  cat >> confdefs.h <<EOF
  29980. -#define $ac_tr_func 1
  29981. -EOF
  29982. -else
  29983. -  echo "$ac_t""no" 1>&6
  29984. +int
  29985. +main ()
  29986. +{
  29987. +return f != $ac_func;
  29988. +  ;
  29989. +  return 0;
  29990. +}
  29991. +_ACEOF
  29992. +rm -f conftest.$ac_objext conftest$ac_exeext
  29993. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  29994. +  (eval $ac_link) 2>&5
  29995. +  ac_status=$?
  29996. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  29997. +  (exit $ac_status); } &&
  29998. +         { ac_try='test -s conftest$ac_exeext'
  29999. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30000. +  (eval $ac_try) 2>&5
  30001. +  ac_status=$?
  30002. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30003. +  (exit $ac_status); }; }; then
  30004. +  eval "$as_ac_var=yes"
  30005. +else
  30006. +  echo "$as_me: failed program was:" >&5
  30007. +sed 's/^/| /' conftest.$ac_ext >&5
  30008. +
  30009. +eval "$as_ac_var=no"
  30010. +fi
  30011. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  30012. +fi
  30013. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  30014. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  30015. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  30016. +  cat >>confdefs.h <<_ACEOF
  30017. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  30018. +_ACEOF
  30019.  fi
  30020.  done
  30021.  
  30022. -echo $ac_n "checking for working mmap""... $ac_c" 1>&6
  30023. -echo "configure:6618: checking for working mmap" >&5
  30024. -if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
  30025. -  echo $ac_n "(cached) $ac_c" 1>&6
  30026. +echo "$as_me:$LINENO: checking for working mmap" >&5
  30027. +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
  30028. +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
  30029. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30030.  else
  30031.    if test "$cross_compiling" = yes; then
  30032.    ac_cv_func_mmap_fixed_mapped=no
  30033.  else
  30034. -  cat > conftest.$ac_ext <<EOF
  30035. -#line 6626 "configure"
  30036. -#include "confdefs.h"
  30037. +  cat >conftest.$ac_ext <<_ACEOF
  30038. +#line $LINENO "configure"
  30039. +/* confdefs.h.  */
  30040. +_ACEOF
  30041. +cat confdefs.h >>conftest.$ac_ext
  30042. +cat >>conftest.$ac_ext <<_ACEOF
  30043. +/* end confdefs.h.  */
  30044. +$ac_includes_default
  30045. +/* malloc might have been renamed as rpl_malloc. */
  30046. +#undef malloc
  30047.  
  30048.  /* Thanks to Mike Haertel and Jim Avera for this test.
  30049.     Here is a matrix of mmap possibilities:
  30050. @@ -6637,34 +9833,34 @@
  30051.     back from the file, nor mmap's back from the file at a different
  30052.     address.  (There have been systems where private was not correctly
  30053.     implemented like the infamous i386 svr4.0, and systems where the
  30054. -   VM page cache was not coherent with the filesystem buffer cache
  30055. +   VM page cache was not coherent with the file system buffer cache
  30056.     like early versions of FreeBSD and possibly contemporary NetBSD.)
  30057.     For shared mappings, we should conversely verify that changes get
  30058. -   propogated back to all the places they're supposed to be.
  30059. +   propagated back to all the places they're supposed to be.
  30060.  
  30061.     Grep wants private fixed already mapped.
  30062.     The main things grep needs to know about mmap are:
  30063.     * does it exist and is it safe to write into the mmap'd area
  30064.     * how to use it (BSD variants)  */
  30065. -#include <sys/types.h>
  30066. +
  30067.  #include <fcntl.h>
  30068.  #include <sys/mman.h>
  30069.  
  30070. -/* This mess was copied from the GNU getpagesize.h.  */
  30071. -#ifndef HAVE_GETPAGESIZE
  30072. -# ifdef HAVE_UNISTD_H
  30073. -#  include <unistd.h>
  30074. -# endif
  30075. +#if !STDC_HEADERS && !HAVE_STDLIB_H
  30076. +char *malloc ();
  30077. +#endif
  30078.  
  30079. +/* This mess was copied from the GNU getpagesize.h.  */
  30080. +#if !HAVE_GETPAGESIZE
  30081.  /* Assume that all systems that can run configure have sys/param.h.  */
  30082. -# ifndef HAVE_SYS_PARAM_H
  30083. +# if !HAVE_SYS_PARAM_H
  30084.  #  define HAVE_SYS_PARAM_H 1
  30085.  # endif
  30086.  
  30087.  # ifdef _SC_PAGESIZE
  30088.  #  define getpagesize() sysconf(_SC_PAGESIZE)
  30089.  # else /* no _SC_PAGESIZE */
  30090. -#  ifdef HAVE_SYS_PARAM_H
  30091. +#  if HAVE_SYS_PARAM_H
  30092.  #   include <sys/param.h>
  30093.  #   ifdef EXEC_PAGESIZE
  30094.  #    define getpagesize() EXEC_PAGESIZE
  30095. @@ -6691,327 +9887,521 @@
  30096.  
  30097.  #endif /* no HAVE_GETPAGESIZE */
  30098.  
  30099. -#ifdef __cplusplus
  30100. -extern "C" { void *malloc(unsigned); }
  30101. -#else
  30102. -char *malloc();
  30103. -#endif
  30104. -
  30105.  int
  30106. -main()
  30107. +main ()
  30108.  {
  30109.      char *data, *data2, *data3;
  30110.      int i, pagesize;
  30111.      int fd;
  30112.  
  30113. -    pagesize = getpagesize();
  30114. +  pagesize = getpagesize ();
  30115.  
  30116. -    /*
  30117. -     * First, make a file with some known garbage in it.
  30118. -     */
  30119. -    data = malloc(pagesize);
  30120. +  /* First, make a file with some known garbage in it. */
  30121. +  data = (char *) malloc (pagesize);
  30122.      if (!data)
  30123. -        exit(1);
  30124. +    exit (1);
  30125.      for (i = 0; i < pagesize; ++i)
  30126. -        *(data + i) = rand();
  30127. -    umask(0);
  30128. -    fd = creat("conftestmmap", 0600);
  30129. +    *(data + i) = rand ();
  30130. +  umask (0);
  30131. +  fd = creat ("conftest.mmap", 0600);
  30132.      if (fd < 0)
  30133. -        exit(1);
  30134. -    if (write(fd, data, pagesize) != pagesize)
  30135. -        exit(1);
  30136. -    close(fd);
  30137. -
  30138. -    /*
  30139. -     * Next, try to mmap the file at a fixed address which
  30140. -     * already has something else allocated at it.  If we can,
  30141. -     * also make sure that we see the same garbage.
  30142. -     */
  30143. -    fd = open("conftestmmap", O_RDWR);
  30144. +    exit (1);
  30145. +  if (write (fd, data, pagesize) != pagesize)
  30146. +    exit (1);
  30147. +  close (fd);
  30148. +
  30149. +  /* Next, try to mmap the file at a fixed address which already has
  30150. +     something else allocated at it.  If we can, also make sure that
  30151. +     we see the same garbage.  */
  30152. +  fd = open ("conftest.mmap", O_RDWR);
  30153.      if (fd < 0)
  30154. -        exit(1);
  30155. -    data2 = malloc(2 * pagesize);
  30156. +    exit (1);
  30157. +  data2 = (char *) malloc (2 * pagesize);
  30158.      if (!data2)
  30159. -        exit(1);
  30160. +    exit (1);
  30161.      data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
  30162. -    if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
  30163. +  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
  30164.          MAP_PRIVATE | MAP_FIXED, fd, 0L))
  30165. -        exit(1);
  30166. +    exit (1);
  30167.      for (i = 0; i < pagesize; ++i)
  30168.          if (*(data + i) != *(data2 + i))
  30169. -            exit(1);
  30170. +      exit (1);
  30171.  
  30172. -    /*
  30173. -     * Finally, make sure that changes to the mapped area
  30174. -     * do not percolate back to the file as seen by read().
  30175. -     * (This is a bug on some variants of i386 svr4.0.)
  30176. -     */
  30177. +  /* Finally, make sure that changes to the mapped area do not
  30178. +     percolate back to the file as seen by read().  (This is a bug on
  30179. +     some variants of i386 svr4.0.)  */
  30180.      for (i = 0; i < pagesize; ++i)
  30181.          *(data2 + i) = *(data2 + i) + 1;
  30182. -    data3 = malloc(pagesize);
  30183. +  data3 = (char *) malloc (pagesize);
  30184.      if (!data3)
  30185. -        exit(1);
  30186. -    if (read(fd, data3, pagesize) != pagesize)
  30187. -        exit(1);
  30188. +    exit (1);
  30189. +  if (read (fd, data3, pagesize) != pagesize)
  30190. +    exit (1);
  30191.      for (i = 0; i < pagesize; ++i)
  30192.          if (*(data + i) != *(data3 + i))
  30193. -            exit(1);
  30194. -    close(fd);
  30195. -    unlink("conftestmmap");
  30196. -    exit(0);
  30197. +      exit (1);
  30198. +  close (fd);
  30199. +  exit (0);
  30200.  }
  30201. -
  30202. -EOF
  30203. -if { (eval echo configure:6766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  30204. -then
  30205. +_ACEOF
  30206. +rm -f conftest$ac_exeext
  30207. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  30208. +  (eval $ac_link) 2>&5
  30209. +  ac_status=$?
  30210. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30211. +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
  30212. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30213. +  (eval $ac_try) 2>&5
  30214. +  ac_status=$?
  30215. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30216. +  (exit $ac_status); }; }; then
  30217.    ac_cv_func_mmap_fixed_mapped=yes
  30218.  else
  30219. -  echo "configure: failed program was:" >&5
  30220. -  cat conftest.$ac_ext >&5
  30221. -  rm -fr conftest*
  30222. -  ac_cv_func_mmap_fixed_mapped=no
  30223. +  echo "$as_me: program exited with status $ac_status" >&5
  30224. +echo "$as_me: failed program was:" >&5
  30225. +sed 's/^/| /' conftest.$ac_ext >&5
  30226. +
  30227. +( exit $ac_status )
  30228. +ac_cv_func_mmap_fixed_mapped=no
  30229.  fi
  30230. -rm -fr conftest*
  30231. +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
  30232.  fi
  30233. -
  30234.  fi
  30235. -
  30236. -echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
  30237. +echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
  30238. +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
  30239.  if test $ac_cv_func_mmap_fixed_mapped = yes; then
  30240. -  cat >> confdefs.h <<\EOF
  30241. +
  30242. +cat >>confdefs.h <<\_ACEOF
  30243.  #define HAVE_MMAP 1
  30244. -EOF
  30245. +_ACEOF
  30246.  
  30247.  fi
  30248. +rm -f conftest.mmap
  30249. +
  30250. +
  30251. +
  30252. +
  30253.  
  30254.                                
  30255. -   for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \
  30256. +
  30257. +
  30258. +
  30259. +
  30260. +for ac_header in argz.h limits.h locale.h nl_types.h malloc.h string.h \
  30261.  unistd.h sys/param.h
  30262.  do
  30263. -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  30264. -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
  30265. -echo "configure:6794: checking for $ac_hdr" >&5
  30266. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  30267. -  echo $ac_n "(cached) $ac_c" 1>&6
  30268. -else
  30269. -  cat > conftest.$ac_ext <<EOF
  30270. -#line 6799 "configure"
  30271. -#include "confdefs.h"
  30272. -#include <$ac_hdr>
  30273. -EOF
  30274. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  30275. -{ (eval echo configure:6804: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  30276. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  30277. -if test -z "$ac_err"; then
  30278. -  rm -rf conftest*
  30279. -  eval "ac_cv_header_$ac_safe=yes"
  30280. -else
  30281. -  echo "$ac_err" >&5
  30282. -  echo "configure: failed program was:" >&5
  30283. -  cat conftest.$ac_ext >&5
  30284. -  rm -rf conftest*
  30285. -  eval "ac_cv_header_$ac_safe=no"
  30286. +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
  30287. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  30288. +  echo "$as_me:$LINENO: checking for $ac_header" >&5
  30289. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  30290. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  30291. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30292. +fi
  30293. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  30294. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  30295. +else
  30296. +  # Is the header compilable?
  30297. +echo "$as_me:$LINENO: checking $ac_header usability" >&5
  30298. +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
  30299. +cat >conftest.$ac_ext <<_ACEOF
  30300. +#line $LINENO "configure"
  30301. +/* confdefs.h.  */
  30302. +_ACEOF
  30303. +cat confdefs.h >>conftest.$ac_ext
  30304. +cat >>conftest.$ac_ext <<_ACEOF
  30305. +/* end confdefs.h.  */
  30306. +$ac_includes_default
  30307. +#include <$ac_header>
  30308. +_ACEOF
  30309. +rm -f conftest.$ac_objext
  30310. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  30311. +  (eval $ac_compile) 2>&5
  30312. +  ac_status=$?
  30313. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30314. +  (exit $ac_status); } &&
  30315. +         { ac_try='test -s conftest.$ac_objext'
  30316. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30317. +  (eval $ac_try) 2>&5
  30318. +  ac_status=$?
  30319. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30320. +  (exit $ac_status); }; }; then
  30321. +  ac_header_compiler=yes
  30322. +else
  30323. +  echo "$as_me: failed program was:" >&5
  30324. +sed 's/^/| /' conftest.$ac_ext >&5
  30325. +
  30326. +ac_header_compiler=no
  30327. +fi
  30328. +rm -f conftest.$ac_objext conftest.$ac_ext
  30329. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  30330. +echo "${ECHO_T}$ac_header_compiler" >&6
  30331. +
  30332. +# Is the header present?
  30333. +echo "$as_me:$LINENO: checking $ac_header presence" >&5
  30334. +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
  30335. +cat >conftest.$ac_ext <<_ACEOF
  30336. +#line $LINENO "configure"
  30337. +/* confdefs.h.  */
  30338. +_ACEOF
  30339. +cat confdefs.h >>conftest.$ac_ext
  30340. +cat >>conftest.$ac_ext <<_ACEOF
  30341. +/* end confdefs.h.  */
  30342. +#include <$ac_header>
  30343. +_ACEOF
  30344. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  30345. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  30346. +  ac_status=$?
  30347. +  grep -v '^ *+' conftest.er1 >conftest.err
  30348. +  rm -f conftest.er1
  30349. +  cat conftest.err >&5
  30350. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30351. +  (exit $ac_status); } >/dev/null; then
  30352. +  if test -s conftest.err; then
  30353. +    ac_cpp_err=$ac_c_preproc_warn_flag
  30354. +  else
  30355. +    ac_cpp_err=
  30356. +  fi
  30357. +else
  30358. +  ac_cpp_err=yes
  30359. +fi
  30360. +if test -z "$ac_cpp_err"; then
  30361. +  ac_header_preproc=yes
  30362. +else
  30363. +  echo "$as_me: failed program was:" >&5
  30364. +sed 's/^/| /' conftest.$ac_ext >&5
  30365. +
  30366. +  ac_header_preproc=no
  30367. +fi
  30368. +rm -f conftest.err conftest.$ac_ext
  30369. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  30370. +echo "${ECHO_T}$ac_header_preproc" >&6
  30371. +
  30372. +# So?  What about this header?
  30373. +case $ac_header_compiler:$ac_header_preproc in
  30374. +  yes:no )
  30375. +    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
  30376. +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
  30377. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  30378. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  30379. +    (
  30380. +      cat <<\_ASBOX
  30381. +## ------------------------------------ ##
  30382. +## Report this to bug-autoconf@gnu.org. ##
  30383. +## ------------------------------------ ##
  30384. +_ASBOX
  30385. +    ) |
  30386. +      sed "s/^/$as_me: WARNING:     /" >&2
  30387. +    ;;
  30388. +  no:yes )
  30389. +    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
  30390. +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
  30391. +    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
  30392. +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
  30393. +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
  30394. +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
  30395. +    (
  30396. +      cat <<\_ASBOX
  30397. +## ------------------------------------ ##
  30398. +## Report this to bug-autoconf@gnu.org. ##
  30399. +## ------------------------------------ ##
  30400. +_ASBOX
  30401. +    ) |
  30402. +      sed "s/^/$as_me: WARNING:     /" >&2
  30403. +    ;;
  30404. +esac
  30405. +echo "$as_me:$LINENO: checking for $ac_header" >&5
  30406. +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
  30407. +if eval "test \"\${$as_ac_Header+set}\" = set"; then
  30408. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30409. +else
  30410. +  eval "$as_ac_Header=$ac_header_preproc"
  30411.  fi
  30412. -rm -f conftest*
  30413. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
  30414. +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
  30415. +
  30416.  fi
  30417. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  30418. -  echo "$ac_t""yes" 1>&6
  30419. -    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  30420. -  cat >> confdefs.h <<EOF
  30421. -#define $ac_tr_hdr 1
  30422. -EOF
  30423. +if test `eval echo '${'$as_ac_Header'}'` = yes; then
  30424. +  cat >>confdefs.h <<_ACEOF
  30425. +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
  30426. +_ACEOF
  30427.   
  30428. -else
  30429. -  echo "$ac_t""no" 1>&6
  30430.  fi
  30431. +
  30432.  done
  30433.  
  30434. -   for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
  30435. +
  30436. +
  30437. +
  30438. +
  30439. +
  30440. +
  30441. +
  30442. +
  30443. +
  30444. +
  30445. +
  30446. +for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
  30447.  strdup __argz_count __argz_stringify __argz_next
  30448.  do
  30449. -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  30450. -echo "configure:6834: checking for $ac_func" >&5
  30451. -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  30452. -  echo $ac_n "(cached) $ac_c" 1>&6
  30453. -else
  30454. -  cat > conftest.$ac_ext <<EOF
  30455. -#line 6839 "configure"
  30456. -#include "confdefs.h"
  30457. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  30458. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  30459. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  30460. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  30461. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30462. +else
  30463. +  cat >conftest.$ac_ext <<_ACEOF
  30464. +#line $LINENO "configure"
  30465. +/* confdefs.h.  */
  30466. +_ACEOF
  30467. +cat confdefs.h >>conftest.$ac_ext
  30468. +cat >>conftest.$ac_ext <<_ACEOF
  30469. +/* end confdefs.h.  */
  30470.  /* System header to define __stub macros and hopefully few prototypes,
  30471. -    which can conflict with char $ac_func(); below.  */
  30472. -#include <assert.h>
  30473. +    which can conflict with char $ac_func (); below.
  30474. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  30475. +    <limits.h> exists even on freestanding compilers.  */
  30476. +#ifdef __STDC__
  30477. +# include <limits.h>
  30478. +#else
  30479. +# include <assert.h>
  30480. +#endif
  30481.  /* Override any gcc2 internal prototype to avoid an error.  */
  30482. +#ifdef __cplusplus
  30483. +extern "C"
  30484. +{
  30485. +#endif
  30486.  /* We use char because int might match the return type of a gcc2
  30487.      builtin and then its argument prototype would still apply.  */
  30488. -char $ac_func();
  30489. -
  30490. -int main() {
  30491. -
  30492. +char $ac_func ();
  30493.  /* The GNU C library defines this for functions which it implements
  30494.      to always fail with ENOSYS.  Some functions are actually named
  30495.      something starting with __ and the normal name is an alias.  */
  30496.  #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  30497.  choke me
  30498.  #else
  30499. -$ac_func();
  30500. +char (*f) () = $ac_func;
  30501. +#endif
  30502. +#ifdef __cplusplus
  30503. +}
  30504.  #endif
  30505.  
  30506. -; return 0; }
  30507. -EOF
  30508. -if { (eval echo configure:6862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  30509. -  rm -rf conftest*
  30510. -  eval "ac_cv_func_$ac_func=yes"
  30511. -else
  30512. -  echo "configure: failed program was:" >&5
  30513. -  cat conftest.$ac_ext >&5
  30514. -  rm -rf conftest*
  30515. -  eval "ac_cv_func_$ac_func=no"
  30516. -fi
  30517. -rm -f conftest*
  30518. -fi
  30519. -
  30520. -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  30521. -  echo "$ac_t""yes" 1>&6
  30522. -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  30523. -  cat >> confdefs.h <<EOF
  30524. -#define $ac_tr_func 1
  30525. -EOF
  30526. +int
  30527. +main ()
  30528. +{
  30529. +return f != $ac_func;
  30530. +  ;
  30531. +  return 0;
  30532. +}
  30533. +_ACEOF
  30534. +rm -f conftest.$ac_objext conftest$ac_exeext
  30535. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  30536. +  (eval $ac_link) 2>&5
  30537. +  ac_status=$?
  30538. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30539. +  (exit $ac_status); } &&
  30540. +         { ac_try='test -s conftest$ac_exeext'
  30541. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30542. +  (eval $ac_try) 2>&5
  30543. +  ac_status=$?
  30544. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30545. +  (exit $ac_status); }; }; then
  30546. +  eval "$as_ac_var=yes"
  30547. +else
  30548. +  echo "$as_me: failed program was:" >&5
  30549. +sed 's/^/| /' conftest.$ac_ext >&5
  30550. +
  30551. +eval "$as_ac_var=no"
  30552. +fi
  30553. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  30554. +fi
  30555. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  30556. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  30557. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  30558. +  cat >>confdefs.h <<_ACEOF
  30559. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  30560. +_ACEOF
  30561.   
  30562. -else
  30563. -  echo "$ac_t""no" 1>&6
  30564.  fi
  30565.  done
  30566.  
  30567.  
  30568.     if test "${ac_cv_func_stpcpy+set}" != "set"; then
  30569. -     for ac_func in stpcpy
  30570. +
  30571. +for ac_func in stpcpy
  30572.  do
  30573. -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  30574. -echo "configure:6891: checking for $ac_func" >&5
  30575. -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  30576. -  echo $ac_n "(cached) $ac_c" 1>&6
  30577. -else
  30578. -  cat > conftest.$ac_ext <<EOF
  30579. -#line 6896 "configure"
  30580. -#include "confdefs.h"
  30581. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  30582. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  30583. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  30584. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  30585. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30586. +else
  30587. +  cat >conftest.$ac_ext <<_ACEOF
  30588. +#line $LINENO "configure"
  30589. +/* confdefs.h.  */
  30590. +_ACEOF
  30591. +cat confdefs.h >>conftest.$ac_ext
  30592. +cat >>conftest.$ac_ext <<_ACEOF
  30593. +/* end confdefs.h.  */
  30594.  /* System header to define __stub macros and hopefully few prototypes,
  30595. -    which can conflict with char $ac_func(); below.  */
  30596. -#include <assert.h>
  30597. +    which can conflict with char $ac_func (); below.
  30598. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  30599. +    <limits.h> exists even on freestanding compilers.  */
  30600. +#ifdef __STDC__
  30601. +# include <limits.h>
  30602. +#else
  30603. +# include <assert.h>
  30604. +#endif
  30605.  /* Override any gcc2 internal prototype to avoid an error.  */
  30606. +#ifdef __cplusplus
  30607. +extern "C"
  30608. +{
  30609. +#endif
  30610.  /* We use char because int might match the return type of a gcc2
  30611.      builtin and then its argument prototype would still apply.  */
  30612. -char $ac_func();
  30613. -
  30614. -int main() {
  30615. -
  30616. +char $ac_func ();
  30617.  /* The GNU C library defines this for functions which it implements
  30618.      to always fail with ENOSYS.  Some functions are actually named
  30619.      something starting with __ and the normal name is an alias.  */
  30620.  #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  30621.  choke me
  30622.  #else
  30623. -$ac_func();
  30624. +char (*f) () = $ac_func;
  30625. +#endif
  30626. +#ifdef __cplusplus
  30627. +}
  30628.  #endif
  30629.  
  30630. -; return 0; }
  30631. -EOF
  30632. -if { (eval echo configure:6919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  30633. -  rm -rf conftest*
  30634. -  eval "ac_cv_func_$ac_func=yes"
  30635. -else
  30636. -  echo "configure: failed program was:" >&5
  30637. -  cat conftest.$ac_ext >&5
  30638. -  rm -rf conftest*
  30639. -  eval "ac_cv_func_$ac_func=no"
  30640. -fi
  30641. -rm -f conftest*
  30642. -fi
  30643. -
  30644. -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  30645. -  echo "$ac_t""yes" 1>&6
  30646. -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  30647. -  cat >> confdefs.h <<EOF
  30648. -#define $ac_tr_func 1
  30649. -EOF
  30650. +int
  30651. +main ()
  30652. +{
  30653. +return f != $ac_func;
  30654. +  ;
  30655. +  return 0;
  30656. +}
  30657. +_ACEOF
  30658. +rm -f conftest.$ac_objext conftest$ac_exeext
  30659. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  30660. +  (eval $ac_link) 2>&5
  30661. +  ac_status=$?
  30662. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30663. +  (exit $ac_status); } &&
  30664. +         { ac_try='test -s conftest$ac_exeext'
  30665. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30666. +  (eval $ac_try) 2>&5
  30667. +  ac_status=$?
  30668. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30669. +  (exit $ac_status); }; }; then
  30670. +  eval "$as_ac_var=yes"
  30671. +else
  30672. +  echo "$as_me: failed program was:" >&5
  30673. +sed 's/^/| /' conftest.$ac_ext >&5
  30674. +
  30675. +eval "$as_ac_var=no"
  30676. +fi
  30677. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  30678. +fi
  30679. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  30680. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  30681. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  30682. +  cat >>confdefs.h <<_ACEOF
  30683. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  30684. +_ACEOF
  30685.   
  30686. -else
  30687. -  echo "$ac_t""no" 1>&6
  30688.  fi
  30689.  done
  30690.  
  30691.     fi
  30692.     if test "${ac_cv_func_stpcpy}" = "yes"; then
  30693. -     cat >> confdefs.h <<\EOF
  30694. +     cat >>confdefs.h <<\_ACEOF
  30695.  #define HAVE_STPCPY 1
  30696. -EOF
  30697. +_ACEOF
  30698.  
  30699.     fi
  30700.  
  30701.     if test $ac_cv_header_locale_h = yes; then
  30702. -    echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
  30703. -echo "configure:6953: checking for LC_MESSAGES" >&5
  30704. -if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
  30705. -  echo $ac_n "(cached) $ac_c" 1>&6
  30706. -else
  30707. -  cat > conftest.$ac_ext <<EOF
  30708. -#line 6958 "configure"
  30709. -#include "confdefs.h"
  30710. +    echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
  30711. +echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
  30712. +if test "${am_cv_val_LC_MESSAGES+set}" = set; then
  30713. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30714. +else
  30715. +  cat >conftest.$ac_ext <<_ACEOF
  30716. +#line $LINENO "configure"
  30717. +/* confdefs.h.  */
  30718. +_ACEOF
  30719. +cat confdefs.h >>conftest.$ac_ext
  30720. +cat >>conftest.$ac_ext <<_ACEOF
  30721. +/* end confdefs.h.  */
  30722.  #include <locale.h>
  30723. -int main() {
  30724. +int
  30725. +main ()
  30726. +{
  30727.  return LC_MESSAGES
  30728. -; return 0; }
  30729. -EOF
  30730. -if { (eval echo configure:6965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  30731. -  rm -rf conftest*
  30732. +  ;
  30733. +  return 0;
  30734. +}
  30735. +_ACEOF
  30736. +rm -f conftest.$ac_objext conftest$ac_exeext
  30737. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  30738. +  (eval $ac_link) 2>&5
  30739. +  ac_status=$?
  30740. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30741. +  (exit $ac_status); } &&
  30742. +         { ac_try='test -s conftest$ac_exeext'
  30743. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30744. +  (eval $ac_try) 2>&5
  30745. +  ac_status=$?
  30746. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30747. +  (exit $ac_status); }; }; then
  30748.    am_cv_val_LC_MESSAGES=yes
  30749.  else
  30750. -  echo "configure: failed program was:" >&5
  30751. -  cat conftest.$ac_ext >&5
  30752. -  rm -rf conftest*
  30753. -  am_cv_val_LC_MESSAGES=no
  30754. +  echo "$as_me: failed program was:" >&5
  30755. +sed 's/^/| /' conftest.$ac_ext >&5
  30756. +
  30757. +am_cv_val_LC_MESSAGES=no
  30758.  fi
  30759. -rm -f conftest*
  30760. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  30761.  fi
  30762. -
  30763. -echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
  30764. +echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
  30765. +echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
  30766.      if test $am_cv_val_LC_MESSAGES = yes; then
  30767. -      cat >> confdefs.h <<\EOF
  30768. +      cat >>confdefs.h <<\_ACEOF
  30769.  #define HAVE_LC_MESSAGES 1
  30770. -EOF
  30771. +_ACEOF
  30772.  
  30773.      fi
  30774.    fi
  30775. -   echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
  30776. -echo "configure:6986: checking whether NLS is requested" >&5
  30777. +   echo "$as_me:$LINENO: checking whether NLS is requested" >&5
  30778. +echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
  30779.          # Check whether --enable-nls or --disable-nls was given.
  30780.  if test "${enable_nls+set}" = set; then
  30781.    enableval="$enable_nls"
  30782.    USE_NLS=$enableval
  30783.  else
  30784.    USE_NLS=yes
  30785. -fi
  30786. -
  30787. -    echo "$ac_t""$USE_NLS" 1>&6
  30788. +fi;
  30789. +    echo "$as_me:$LINENO: result: $USE_NLS" >&5
  30790. +echo "${ECHO_T}$USE_NLS" >&6
  30791.      
  30792.  
  30793.      USE_INCLUDED_LIBINTL=no
  30794.  
  30795.          if test "$USE_NLS" = "yes"; then
  30796. -      cat >> confdefs.h <<\EOF
  30797. +      cat >>confdefs.h <<\_ACEOF
  30798.  #define ENABLE_NLS 1
  30799. -EOF
  30800. +_ACEOF
  30801. +
  30802. +      echo "$as_me:$LINENO: checking whether included gettext is requested" >&5
  30803. +echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6
  30804.  
  30805. -      echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
  30806. -echo "configure:7006: checking whether included gettext is requested" >&5
  30807. -      # Check whether --with-included-gettext or --without-included-gettext was given.
  30808. +# Check whether --with-included-gettext or --without-included-gettext was given.
  30809.  if test "${with_included_gettext+set}" = set; then
  30810.    withval="$with_included_gettext"
  30811.    nls_cv_force_use_gnu_gettext=$withval
  30812.  else
  30813.    nls_cv_force_use_gnu_gettext=no
  30814. -fi
  30815. -
  30816. -      echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
  30817. +fi;
  30818. +      echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5
  30819. +echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6
  30820.  
  30821.        nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
  30822.        if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
  30823. @@ -7019,164 +10409,321 @@
  30824.      nls_cv_header_libgt=
  30825.      CATOBJEXT=NONE
  30826.  
  30827. -    ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
  30828. -echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
  30829. -echo "configure:7025: checking for libintl.h" >&5
  30830. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  30831. -  echo $ac_n "(cached) $ac_c" 1>&6
  30832. -else
  30833. -  cat > conftest.$ac_ext <<EOF
  30834. -#line 7030 "configure"
  30835. -#include "confdefs.h"
  30836. +    if test "${ac_cv_header_libintl_h+set}" = set; then
  30837. +  echo "$as_me:$LINENO: checking for libintl.h" >&5
  30838. +echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
  30839. +if test "${ac_cv_header_libintl_h+set}" = set; then
  30840. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30841. +fi
  30842. +echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
  30843. +echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
  30844. +else
  30845. +  # Is the header compilable?
  30846. +echo "$as_me:$LINENO: checking libintl.h usability" >&5
  30847. +echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6
  30848. +cat >conftest.$ac_ext <<_ACEOF
  30849. +#line $LINENO "configure"
  30850. +/* confdefs.h.  */
  30851. +_ACEOF
  30852. +cat confdefs.h >>conftest.$ac_ext
  30853. +cat >>conftest.$ac_ext <<_ACEOF
  30854. +/* end confdefs.h.  */
  30855. +$ac_includes_default
  30856.  #include <libintl.h>
  30857. -EOF
  30858. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  30859. -{ (eval echo configure:7035: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  30860. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  30861. -if test -z "$ac_err"; then
  30862. -  rm -rf conftest*
  30863. -  eval "ac_cv_header_$ac_safe=yes"
  30864. -else
  30865. -  echo "$ac_err" >&5
  30866. -  echo "configure: failed program was:" >&5
  30867. -  cat conftest.$ac_ext >&5
  30868. -  rm -rf conftest*
  30869. -  eval "ac_cv_header_$ac_safe=no"
  30870. -fi
  30871. -rm -f conftest*
  30872. -fi
  30873. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  30874. -  echo "$ac_t""yes" 1>&6
  30875. -  echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
  30876. -echo "configure:7052: checking for gettext in libc" >&5
  30877. -if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
  30878. -  echo $ac_n "(cached) $ac_c" 1>&6
  30879. -else
  30880. -  cat > conftest.$ac_ext <<EOF
  30881. -#line 7057 "configure"
  30882. -#include "confdefs.h"
  30883. +_ACEOF
  30884. +rm -f conftest.$ac_objext
  30885. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  30886. +  (eval $ac_compile) 2>&5
  30887. +  ac_status=$?
  30888. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30889. +  (exit $ac_status); } &&
  30890. +         { ac_try='test -s conftest.$ac_objext'
  30891. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  30892. +  (eval $ac_try) 2>&5
  30893. +  ac_status=$?
  30894. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30895. +  (exit $ac_status); }; }; then
  30896. +  ac_header_compiler=yes
  30897. +else
  30898. +  echo "$as_me: failed program was:" >&5
  30899. +sed 's/^/| /' conftest.$ac_ext >&5
  30900. +
  30901. +ac_header_compiler=no
  30902. +fi
  30903. +rm -f conftest.$ac_objext conftest.$ac_ext
  30904. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  30905. +echo "${ECHO_T}$ac_header_compiler" >&6
  30906. +
  30907. +# Is the header present?
  30908. +echo "$as_me:$LINENO: checking libintl.h presence" >&5
  30909. +echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6
  30910. +cat >conftest.$ac_ext <<_ACEOF
  30911. +#line $LINENO "configure"
  30912. +/* confdefs.h.  */
  30913. +_ACEOF
  30914. +cat confdefs.h >>conftest.$ac_ext
  30915. +cat >>conftest.$ac_ext <<_ACEOF
  30916. +/* end confdefs.h.  */
  30917. +#include <libintl.h>
  30918. +_ACEOF
  30919. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  30920. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  30921. +  ac_status=$?
  30922. +  grep -v '^ *+' conftest.er1 >conftest.err
  30923. +  rm -f conftest.er1
  30924. +  cat conftest.err >&5
  30925. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  30926. +  (exit $ac_status); } >/dev/null; then
  30927. +  if test -s conftest.err; then
  30928. +    ac_cpp_err=$ac_c_preproc_warn_flag
  30929. +  else
  30930. +    ac_cpp_err=
  30931. +  fi
  30932. +else
  30933. +  ac_cpp_err=yes
  30934. +fi
  30935. +if test -z "$ac_cpp_err"; then
  30936. +  ac_header_preproc=yes
  30937. +else
  30938. +  echo "$as_me: failed program was:" >&5
  30939. +sed 's/^/| /' conftest.$ac_ext >&5
  30940. +
  30941. +  ac_header_preproc=no
  30942. +fi
  30943. +rm -f conftest.err conftest.$ac_ext
  30944. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  30945. +echo "${ECHO_T}$ac_header_preproc" >&6
  30946. +
  30947. +# So?  What about this header?
  30948. +case $ac_header_compiler:$ac_header_preproc in
  30949. +  yes:no )
  30950. +    { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
  30951. +echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
  30952. +    { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
  30953. +echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
  30954. +    (
  30955. +      cat <<\_ASBOX
  30956. +## ------------------------------------ ##
  30957. +## Report this to bug-autoconf@gnu.org. ##
  30958. +## ------------------------------------ ##
  30959. +_ASBOX
  30960. +    ) |
  30961. +      sed "s/^/$as_me: WARNING:     /" >&2
  30962. +    ;;
  30963. +  no:yes )
  30964. +    { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
  30965. +echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
  30966. +    { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5
  30967. +echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;}
  30968. +    { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
  30969. +echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
  30970. +    (
  30971. +      cat <<\_ASBOX
  30972. +## ------------------------------------ ##
  30973. +## Report this to bug-autoconf@gnu.org. ##
  30974. +## ------------------------------------ ##
  30975. +_ASBOX
  30976. +    ) |
  30977. +      sed "s/^/$as_me: WARNING:     /" >&2
  30978. +    ;;
  30979. +esac
  30980. +echo "$as_me:$LINENO: checking for libintl.h" >&5
  30981. +echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
  30982. +if test "${ac_cv_header_libintl_h+set}" = set; then
  30983. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30984. +else
  30985. +  ac_cv_header_libintl_h=$ac_header_preproc
  30986. +fi
  30987. +echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
  30988. +echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
  30989. +
  30990. +fi
  30991. +if test $ac_cv_header_libintl_h = yes; then
  30992. +  echo "$as_me:$LINENO: checking for gettext in libc" >&5
  30993. +echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6
  30994. +if test "${gt_cv_func_gettext_libc+set}" = set; then
  30995. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  30996. +else
  30997. +  cat >conftest.$ac_ext <<_ACEOF
  30998. +#line $LINENO "configure"
  30999. +/* confdefs.h.  */
  31000. +_ACEOF
  31001. +cat confdefs.h >>conftest.$ac_ext
  31002. +cat >>conftest.$ac_ext <<_ACEOF
  31003. +/* end confdefs.h.  */
  31004.  #include <libintl.h>
  31005. -int main() {
  31006. +int
  31007. +main ()
  31008. +{
  31009.  return (int) gettext ("")
  31010. -; return 0; }
  31011. -EOF
  31012. -if { (eval echo configure:7064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31013. -  rm -rf conftest*
  31014. +  ;
  31015. +  return 0;
  31016. +}
  31017. +_ACEOF
  31018. +rm -f conftest.$ac_objext conftest$ac_exeext
  31019. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31020. +  (eval $ac_link) 2>&5
  31021. +  ac_status=$?
  31022. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31023. +  (exit $ac_status); } &&
  31024. +         { ac_try='test -s conftest$ac_exeext'
  31025. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31026. +  (eval $ac_try) 2>&5
  31027. +  ac_status=$?
  31028. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31029. +  (exit $ac_status); }; }; then
  31030.    gt_cv_func_gettext_libc=yes
  31031.  else
  31032. -  echo "configure: failed program was:" >&5
  31033. -  cat conftest.$ac_ext >&5
  31034. -  rm -rf conftest*
  31035. -  gt_cv_func_gettext_libc=no
  31036. +  echo "$as_me: failed program was:" >&5
  31037. +sed 's/^/| /' conftest.$ac_ext >&5
  31038. +
  31039. +gt_cv_func_gettext_libc=no
  31040.  fi
  31041. -rm -f conftest*
  31042. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31043.  fi
  31044. -
  31045. -echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
  31046. +echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5
  31047. +echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6
  31048.  
  31049.         if test "$gt_cv_func_gettext_libc" != "yes"; then
  31050. -         echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
  31051. -echo "configure:7080: checking for bindtextdomain in -lintl" >&5
  31052. -ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
  31053. -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  31054. -  echo $ac_n "(cached) $ac_c" 1>&6
  31055. +         echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5
  31056. +echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6
  31057. +if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then
  31058. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31059.  else
  31060. -  ac_save_LIBS="$LIBS"
  31061. +  ac_check_lib_save_LIBS=$LIBS
  31062.  LIBS="-lintl  $LIBS"
  31063. -cat > conftest.$ac_ext <<EOF
  31064. -#line 7088 "configure"
  31065. -#include "confdefs.h"
  31066. +cat >conftest.$ac_ext <<_ACEOF
  31067. +#line $LINENO "configure"
  31068. +/* confdefs.h.  */
  31069. +_ACEOF
  31070. +cat confdefs.h >>conftest.$ac_ext
  31071. +cat >>conftest.$ac_ext <<_ACEOF
  31072. +/* end confdefs.h.  */
  31073. +
  31074.  /* Override any gcc2 internal prototype to avoid an error.  */
  31075. +#ifdef __cplusplus
  31076. +extern "C"
  31077. +#endif
  31078.  /* We use char because int might match the return type of a gcc2
  31079.      builtin and then its argument prototype would still apply.  */
  31080. -char bindtextdomain();
  31081. -
  31082. -int main() {
  31083. -bindtextdomain()
  31084. -; return 0; }
  31085. -EOF
  31086. -if { (eval echo configure:7099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31087. -  rm -rf conftest*
  31088. -  eval "ac_cv_lib_$ac_lib_var=yes"
  31089. -else
  31090. -  echo "configure: failed program was:" >&5
  31091. -  cat conftest.$ac_ext >&5
  31092. -  rm -rf conftest*
  31093. -  eval "ac_cv_lib_$ac_lib_var=no"
  31094. -fi
  31095. -rm -f conftest*
  31096. -LIBS="$ac_save_LIBS"
  31097. -
  31098. -fi
  31099. -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  31100. -  echo "$ac_t""yes" 1>&6
  31101. -  echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
  31102. -echo "configure:7115: checking for gettext in libintl" >&5
  31103. -if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
  31104. -  echo $ac_n "(cached) $ac_c" 1>&6
  31105. -else
  31106. -  echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
  31107. -echo "configure:7120: checking for gettext in -lintl" >&5
  31108. -ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
  31109. -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  31110. -  echo $ac_n "(cached) $ac_c" 1>&6
  31111. +char bindtextdomain ();
  31112. +int
  31113. +main ()
  31114. +{
  31115. +bindtextdomain ();
  31116. +  ;
  31117. +  return 0;
  31118. +}
  31119. +_ACEOF
  31120. +rm -f conftest.$ac_objext conftest$ac_exeext
  31121. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31122. +  (eval $ac_link) 2>&5
  31123. +  ac_status=$?
  31124. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31125. +  (exit $ac_status); } &&
  31126. +         { ac_try='test -s conftest$ac_exeext'
  31127. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31128. +  (eval $ac_try) 2>&5
  31129. +  ac_status=$?
  31130. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31131. +  (exit $ac_status); }; }; then
  31132. +  ac_cv_lib_intl_bindtextdomain=yes
  31133. +else
  31134. +  echo "$as_me: failed program was:" >&5
  31135. +sed 's/^/| /' conftest.$ac_ext >&5
  31136. +
  31137. +ac_cv_lib_intl_bindtextdomain=no
  31138. +fi
  31139. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31140. +LIBS=$ac_check_lib_save_LIBS
  31141. +fi
  31142. +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5
  31143. +echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6
  31144. +if test $ac_cv_lib_intl_bindtextdomain = yes; then
  31145. +  echo "$as_me:$LINENO: checking for gettext in libintl" >&5
  31146. +echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6
  31147. +if test "${gt_cv_func_gettext_libintl+set}" = set; then
  31148. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31149. +else
  31150. +  echo "$as_me:$LINENO: checking for gettext in -lintl" >&5
  31151. +echo $ECHO_N "checking for gettext in -lintl... $ECHO_C" >&6
  31152. +if test "${ac_cv_lib_intl_gettext+set}" = set; then
  31153. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31154.  else
  31155. -  ac_save_LIBS="$LIBS"
  31156. +  ac_check_lib_save_LIBS=$LIBS
  31157.  LIBS="-lintl  $LIBS"
  31158. -cat > conftest.$ac_ext <<EOF
  31159. -#line 7128 "configure"
  31160. -#include "confdefs.h"
  31161. +cat >conftest.$ac_ext <<_ACEOF
  31162. +#line $LINENO "configure"
  31163. +/* confdefs.h.  */
  31164. +_ACEOF
  31165. +cat confdefs.h >>conftest.$ac_ext
  31166. +cat >>conftest.$ac_ext <<_ACEOF
  31167. +/* end confdefs.h.  */
  31168. +
  31169.  /* Override any gcc2 internal prototype to avoid an error.  */
  31170. +#ifdef __cplusplus
  31171. +extern "C"
  31172. +#endif
  31173.  /* We use char because int might match the return type of a gcc2
  31174.      builtin and then its argument prototype would still apply.  */
  31175. -char gettext();
  31176. -
  31177. -int main() {
  31178. -gettext()
  31179. -; return 0; }
  31180. -EOF
  31181. -if { (eval echo configure:7139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31182. -  rm -rf conftest*
  31183. -  eval "ac_cv_lib_$ac_lib_var=yes"
  31184. -else
  31185. -  echo "configure: failed program was:" >&5
  31186. -  cat conftest.$ac_ext >&5
  31187. -  rm -rf conftest*
  31188. -  eval "ac_cv_lib_$ac_lib_var=no"
  31189. -fi
  31190. -rm -f conftest*
  31191. -LIBS="$ac_save_LIBS"
  31192. -
  31193. -fi
  31194. -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  31195. -  echo "$ac_t""yes" 1>&6
  31196. +char gettext ();
  31197. +int
  31198. +main ()
  31199. +{
  31200. +gettext ();
  31201. +  ;
  31202. +  return 0;
  31203. +}
  31204. +_ACEOF
  31205. +rm -f conftest.$ac_objext conftest$ac_exeext
  31206. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31207. +  (eval $ac_link) 2>&5
  31208. +  ac_status=$?
  31209. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31210. +  (exit $ac_status); } &&
  31211. +         { ac_try='test -s conftest$ac_exeext'
  31212. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31213. +  (eval $ac_try) 2>&5
  31214. +  ac_status=$?
  31215. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31216. +  (exit $ac_status); }; }; then
  31217. +  ac_cv_lib_intl_gettext=yes
  31218. +else
  31219. +  echo "$as_me: failed program was:" >&5
  31220. +sed 's/^/| /' conftest.$ac_ext >&5
  31221. +
  31222. +ac_cv_lib_intl_gettext=no
  31223. +fi
  31224. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31225. +LIBS=$ac_check_lib_save_LIBS
  31226. +fi
  31227. +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_gettext" >&5
  31228. +echo "${ECHO_T}$ac_cv_lib_intl_gettext" >&6
  31229. +if test $ac_cv_lib_intl_gettext = yes; then
  31230.    gt_cv_func_gettext_libintl=yes
  31231.  else
  31232. -  echo "$ac_t""no" 1>&6
  31233. -gt_cv_func_gettext_libintl=no
  31234. +  gt_cv_func_gettext_libintl=no
  31235.  fi
  31236.  
  31237.  fi
  31238. -
  31239. -echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6
  31240. -else
  31241. -  echo "$ac_t""no" 1>&6
  31242. +echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5
  31243. +echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6
  31244.  fi
  31245.  
  31246.         fi
  31247.  
  31248.         if test "$gt_cv_func_gettext_libc" = "yes" \
  31249.            || test "$gt_cv_func_gettext_libintl" = "yes"; then
  31250. -          cat >> confdefs.h <<\EOF
  31251. +          cat >>confdefs.h <<\_ACEOF
  31252.  #define HAVE_GETTEXT 1
  31253. -EOF
  31254. +_ACEOF
  31255.  
  31256.            # Extract the first word of "msgfmt", so it can be a program name with args.
  31257.  set dummy msgfmt; ac_word=$2
  31258. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31259. -echo "configure:7178: checking for $ac_word" >&5
  31260. -if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
  31261. -  echo $ac_n "(cached) $ac_c" 1>&6
  31262. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31263. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31264. +if test "${ac_cv_path_MSGFMT+set}" = set; then
  31265. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31266.  else
  31267.    case "$MSGFMT" in
  31268.    /*)
  31269. @@ -7200,108 +10747,143 @@
  31270.  fi
  31271.  MSGFMT="$ac_cv_path_MSGFMT"
  31272.  if test -n "$MSGFMT"; then
  31273. -  echo "$ac_t""$MSGFMT" 1>&6
  31274. +  echo "$as_me:$LINENO: result: $MSGFMT" >&5
  31275. +echo "${ECHO_T}$MSGFMT" >&6
  31276.  else
  31277. -  echo "$ac_t""no" 1>&6
  31278. +  echo "$as_me:$LINENO: result: no" >&5
  31279. +echo "${ECHO_T}no" >&6
  31280.  fi
  31281.            if test "$MSGFMT" != "no"; then
  31282. -        for ac_func in dcgettext
  31283. +
  31284. +for ac_func in dcgettext
  31285.  do
  31286. -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
  31287. -echo "configure:7212: checking for $ac_func" >&5
  31288. -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  31289. -  echo $ac_n "(cached) $ac_c" 1>&6
  31290. -else
  31291. -  cat > conftest.$ac_ext <<EOF
  31292. -#line 7217 "configure"
  31293. -#include "confdefs.h"
  31294. +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
  31295. +echo "$as_me:$LINENO: checking for $ac_func" >&5
  31296. +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
  31297. +if eval "test \"\${$as_ac_var+set}\" = set"; then
  31298. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31299. +else
  31300. +  cat >conftest.$ac_ext <<_ACEOF
  31301. +#line $LINENO "configure"
  31302. +/* confdefs.h.  */
  31303. +_ACEOF
  31304. +cat confdefs.h >>conftest.$ac_ext
  31305. +cat >>conftest.$ac_ext <<_ACEOF
  31306. +/* end confdefs.h.  */
  31307.  /* System header to define __stub macros and hopefully few prototypes,
  31308. -    which can conflict with char $ac_func(); below.  */
  31309. -#include <assert.h>
  31310. +    which can conflict with char $ac_func (); below.
  31311. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  31312. +    <limits.h> exists even on freestanding compilers.  */
  31313. +#ifdef __STDC__
  31314. +# include <limits.h>
  31315. +#else
  31316. +# include <assert.h>
  31317. +#endif
  31318.  /* Override any gcc2 internal prototype to avoid an error.  */
  31319. +#ifdef __cplusplus
  31320. +extern "C"
  31321. +{
  31322. +#endif
  31323.  /* We use char because int might match the return type of a gcc2
  31324.      builtin and then its argument prototype would still apply.  */
  31325. -char $ac_func();
  31326. -
  31327. -int main() {
  31328. -
  31329. +char $ac_func ();
  31330.  /* The GNU C library defines this for functions which it implements
  31331.      to always fail with ENOSYS.  Some functions are actually named
  31332.      something starting with __ and the normal name is an alias.  */
  31333.  #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
  31334.  choke me
  31335.  #else
  31336. -$ac_func();
  31337. +char (*f) () = $ac_func;
  31338. +#endif
  31339. +#ifdef __cplusplus
  31340. +}
  31341.  #endif
  31342.  
  31343. -; return 0; }
  31344. -EOF
  31345. -if { (eval echo configure:7240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31346. -  rm -rf conftest*
  31347. -  eval "ac_cv_func_$ac_func=yes"
  31348. -else
  31349. -  echo "configure: failed program was:" >&5
  31350. -  cat conftest.$ac_ext >&5
  31351. -  rm -rf conftest*
  31352. -  eval "ac_cv_func_$ac_func=no"
  31353. -fi
  31354. -rm -f conftest*
  31355. -fi
  31356. -
  31357. -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  31358. -  echo "$ac_t""yes" 1>&6
  31359. -    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  31360. -  cat >> confdefs.h <<EOF
  31361. -#define $ac_tr_func 1
  31362. -EOF
  31363. +int
  31364. +main ()
  31365. +{
  31366. +return f != $ac_func;
  31367. +  ;
  31368. +  return 0;
  31369. +}
  31370. +_ACEOF
  31371. +rm -f conftest.$ac_objext conftest$ac_exeext
  31372. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31373. +  (eval $ac_link) 2>&5
  31374. +  ac_status=$?
  31375. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31376. +  (exit $ac_status); } &&
  31377. +         { ac_try='test -s conftest$ac_exeext'
  31378. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31379. +  (eval $ac_try) 2>&5
  31380. +  ac_status=$?
  31381. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31382. +  (exit $ac_status); }; }; then
  31383. +  eval "$as_ac_var=yes"
  31384. +else
  31385. +  echo "$as_me: failed program was:" >&5
  31386. +sed 's/^/| /' conftest.$ac_ext >&5
  31387. +
  31388. +eval "$as_ac_var=no"
  31389. +fi
  31390. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31391. +fi
  31392. +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
  31393. +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
  31394. +if test `eval echo '${'$as_ac_var'}'` = yes; then
  31395. +  cat >>confdefs.h <<_ACEOF
  31396. +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
  31397. +_ACEOF
  31398.   
  31399. -else
  31400. -  echo "$ac_t""no" 1>&6
  31401.  fi
  31402.  done
  31403.  
  31404.          # Extract the first word of "gmsgfmt", so it can be a program name with args.
  31405.  set dummy gmsgfmt; ac_word=$2
  31406. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31407. -echo "configure:7267: checking for $ac_word" >&5
  31408. -if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
  31409. -  echo $ac_n "(cached) $ac_c" 1>&6
  31410. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31411. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31412. +if test "${ac_cv_path_GMSGFMT+set}" = set; then
  31413. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31414.  else
  31415. -  case "$GMSGFMT" in
  31416. -  /*)
  31417. +  case $GMSGFMT in
  31418. +  [\\/]* | ?:[\\/]*)
  31419.    ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
  31420.    ;;
  31421. -  ?:/*)             
  31422. -  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
  31423. -  ;;
  31424.    *)
  31425. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  31426. -  ac_dummy="$PATH"
  31427. -  for ac_dir in $ac_dummy; do 
  31428. -    test -z "$ac_dir" && ac_dir=.
  31429. -    if test -f $ac_dir/$ac_word; then
  31430. -      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
  31431. -      break
  31432. +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  31433. +for as_dir in $PATH
  31434. +do
  31435. +  IFS=$as_save_IFS
  31436. +  test -z "$as_dir" && as_dir=.
  31437. +  for ac_exec_ext in '' $ac_executable_extensions; do
  31438. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  31439. +    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
  31440. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  31441. +    break 2
  31442.      fi
  31443. -  done
  31444. -  IFS="$ac_save_ifs"
  31445. +done
  31446. +done
  31447. +
  31448.    test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
  31449.    ;;
  31450.  esac
  31451.  fi
  31452. -GMSGFMT="$ac_cv_path_GMSGFMT"
  31453. +GMSGFMT=$ac_cv_path_GMSGFMT
  31454. +
  31455.  if test -n "$GMSGFMT"; then
  31456. -  echo "$ac_t""$GMSGFMT" 1>&6
  31457. +  echo "$as_me:$LINENO: result: $GMSGFMT" >&5
  31458. +echo "${ECHO_T}$GMSGFMT" >&6
  31459.  else
  31460. -  echo "$ac_t""no" 1>&6
  31461. +  echo "$as_me:$LINENO: result: no" >&5
  31462. +echo "${ECHO_T}no" >&6
  31463.  fi
  31464.  
  31465.          # Extract the first word of "xgettext", so it can be a program name with args.
  31466.  set dummy xgettext; ac_word=$2
  31467. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31468. -echo "configure:7303: checking for $ac_word" >&5
  31469. -if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
  31470. -  echo $ac_n "(cached) $ac_c" 1>&6
  31471. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31472. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31473. +if test "${ac_cv_path_XGETTEXT+set}" = set; then
  31474. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31475.  else
  31476.    case "$XGETTEXT" in
  31477.    /*)
  31478. @@ -7325,38 +10907,56 @@
  31479.  fi
  31480.  XGETTEXT="$ac_cv_path_XGETTEXT"
  31481.  if test -n "$XGETTEXT"; then
  31482. -  echo "$ac_t""$XGETTEXT" 1>&6
  31483. +  echo "$as_me:$LINENO: result: $XGETTEXT" >&5
  31484. +echo "${ECHO_T}$XGETTEXT" >&6
  31485.  else
  31486. -  echo "$ac_t""no" 1>&6
  31487. +  echo "$as_me:$LINENO: result: no" >&5
  31488. +echo "${ECHO_T}no" >&6
  31489.  fi
  31490.  
  31491. -        cat > conftest.$ac_ext <<EOF
  31492. -#line 7335 "configure"
  31493. -#include "confdefs.h"
  31494. +        cat >conftest.$ac_ext <<_ACEOF
  31495. +#line $LINENO "configure"
  31496. +/* confdefs.h.  */
  31497. +_ACEOF
  31498. +cat confdefs.h >>conftest.$ac_ext
  31499. +cat >>conftest.$ac_ext <<_ACEOF
  31500. +/* end confdefs.h.  */
  31501.  
  31502. -int main() {
  31503. +int
  31504. +main ()
  31505. +{
  31506.  extern int _nl_msg_cat_cntr;
  31507.                     return _nl_msg_cat_cntr
  31508. -; return 0; }
  31509. -EOF
  31510. -if { (eval echo configure:7343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31511. -  rm -rf conftest*
  31512. +  ;
  31513. +  return 0;
  31514. +}
  31515. +_ACEOF
  31516. +rm -f conftest.$ac_objext conftest$ac_exeext
  31517. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31518. +  (eval $ac_link) 2>&5
  31519. +  ac_status=$?
  31520. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31521. +  (exit $ac_status); } &&
  31522. +         { ac_try='test -s conftest$ac_exeext'
  31523. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31524. +  (eval $ac_try) 2>&5
  31525. +  ac_status=$?
  31526. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31527. +  (exit $ac_status); }; }; then
  31528.    CATOBJEXT=.gmo
  31529.             DATADIRNAME=share
  31530.  else
  31531. -  echo "configure: failed program was:" >&5
  31532. -  cat conftest.$ac_ext >&5
  31533. -  rm -rf conftest*
  31534. -  CATOBJEXT=.mo
  31535. +  echo "$as_me: failed program was:" >&5
  31536. +sed 's/^/| /' conftest.$ac_ext >&5
  31537. +
  31538. +CATOBJEXT=.mo
  31539.             DATADIRNAME=lib
  31540.  fi
  31541. -rm -f conftest*
  31542. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31543.          INSTOBJEXT=.mo
  31544.            fi
  31545.          fi
  31546.      
  31547. -else
  31548. -  echo "$ac_t""no" 1>&6
  31549.  fi
  31550.  
  31551.  
  31552. @@ -7360,190 +10960,245 @@
  31553.  fi
  31554.  
  31555.  
  31556. +
  31557.          if test "$CATOBJEXT" = "NONE"; then
  31558. -      echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
  31559. -echo "configure:7366: checking whether catgets can be used" >&5
  31560. -      # Check whether --with-catgets or --without-catgets was given.
  31561. +      echo "$as_me:$LINENO: checking whether catgets can be used" >&5
  31562. +echo $ECHO_N "checking whether catgets can be used... $ECHO_C" >&6
  31563. +
  31564. +# Check whether --with-catgets or --without-catgets was given.
  31565.  if test "${with_catgets+set}" = set; then
  31566.    withval="$with_catgets"
  31567.    nls_cv_use_catgets=$withval
  31568.  else
  31569.    nls_cv_use_catgets=no
  31570. -fi
  31571. -
  31572. -      echo "$ac_t""$nls_cv_use_catgets" 1>&6
  31573. +fi;
  31574. +      echo "$as_me:$LINENO: result: $nls_cv_use_catgets" >&5
  31575. +echo "${ECHO_T}$nls_cv_use_catgets" >&6
  31576.  
  31577.        if test "$nls_cv_use_catgets" = "yes"; then
  31578. -                echo $ac_n "checking for main in -li""... $ac_c" 1>&6
  31579. -echo "configure:7379: checking for main in -li" >&5
  31580. -ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
  31581. -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  31582. -  echo $ac_n "(cached) $ac_c" 1>&6
  31583. +
  31584. +echo "$as_me:$LINENO: checking for main in -li" >&5
  31585. +echo $ECHO_N "checking for main in -li... $ECHO_C" >&6
  31586. +if test "${ac_cv_lib_i_main+set}" = set; then
  31587. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31588.  else
  31589. -  ac_save_LIBS="$LIBS"
  31590. +  ac_check_lib_save_LIBS=$LIBS
  31591.  LIBS="-li  $LIBS"
  31592. -cat > conftest.$ac_ext <<EOF
  31593. -#line 7387 "configure"
  31594. -#include "confdefs.h"
  31595. +cat >conftest.$ac_ext <<_ACEOF
  31596. +#line $LINENO "configure"
  31597. +/* confdefs.h.  */
  31598. +_ACEOF
  31599. +cat confdefs.h >>conftest.$ac_ext
  31600. +cat >>conftest.$ac_ext <<_ACEOF
  31601. +/* end confdefs.h.  */
  31602.  
  31603. -int main() {
  31604. -main()
  31605. -; return 0; }
  31606. -EOF
  31607. -if { (eval echo configure:7394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31608. -  rm -rf conftest*
  31609. -  eval "ac_cv_lib_$ac_lib_var=yes"
  31610. -else
  31611. -  echo "configure: failed program was:" >&5
  31612. -  cat conftest.$ac_ext >&5
  31613. -  rm -rf conftest*
  31614. -  eval "ac_cv_lib_$ac_lib_var=no"
  31615. -fi
  31616. -rm -f conftest*
  31617. -LIBS="$ac_save_LIBS"
  31618.  
  31619. -fi
  31620. -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  31621. -  echo "$ac_t""yes" 1>&6
  31622. -    ac_tr_lib=HAVE_LIB`echo i | sed -e 's/[^a-zA-Z0-9_]/_/g' \
  31623. -    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
  31624. -  cat >> confdefs.h <<EOF
  31625. -#define $ac_tr_lib 1
  31626. -EOF
  31627. +int
  31628. +main ()
  31629. +{
  31630. +main ();
  31631. +  ;
  31632. +  return 0;
  31633. +}
  31634. +_ACEOF
  31635. +rm -f conftest.$ac_objext conftest$ac_exeext
  31636. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31637. +  (eval $ac_link) 2>&5
  31638. +  ac_status=$?
  31639. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31640. +  (exit $ac_status); } &&
  31641. +         { ac_try='test -s conftest$ac_exeext'
  31642. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31643. +  (eval $ac_try) 2>&5
  31644. +  ac_status=$?
  31645. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31646. +  (exit $ac_status); }; }; then
  31647. +  ac_cv_lib_i_main=yes
  31648. +else
  31649. +  echo "$as_me: failed program was:" >&5
  31650. +sed 's/^/| /' conftest.$ac_ext >&5
  31651. +
  31652. +ac_cv_lib_i_main=no
  31653. +fi
  31654. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31655. +LIBS=$ac_check_lib_save_LIBS
  31656. +fi
  31657. +echo "$as_me:$LINENO: result: $ac_cv_lib_i_main" >&5
  31658. +echo "${ECHO_T}$ac_cv_lib_i_main" >&6
  31659. +if test $ac_cv_lib_i_main = yes; then
  31660. +  cat >>confdefs.h <<_ACEOF
  31661. +#define HAVE_LIBI 1
  31662. +_ACEOF
  31663.  
  31664.    LIBS="-li $LIBS"
  31665.  
  31666. -else
  31667. -  echo "$ac_t""no" 1>&6
  31668.  fi
  31669.  
  31670. -        echo $ac_n "checking for catgets""... $ac_c" 1>&6
  31671. -echo "configure:7422: checking for catgets" >&5
  31672. -if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
  31673. -  echo $ac_n "(cached) $ac_c" 1>&6
  31674. -else
  31675. -  cat > conftest.$ac_ext <<EOF
  31676. -#line 7427 "configure"
  31677. -#include "confdefs.h"
  31678. +        echo "$as_me:$LINENO: checking for catgets" >&5
  31679. +echo $ECHO_N "checking for catgets... $ECHO_C" >&6
  31680. +if test "${ac_cv_func_catgets+set}" = set; then
  31681. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31682. +else
  31683. +  cat >conftest.$ac_ext <<_ACEOF
  31684. +#line $LINENO "configure"
  31685. +/* confdefs.h.  */
  31686. +_ACEOF
  31687. +cat confdefs.h >>conftest.$ac_ext
  31688. +cat >>conftest.$ac_ext <<_ACEOF
  31689. +/* end confdefs.h.  */
  31690.  /* System header to define __stub macros and hopefully few prototypes,
  31691. -    which can conflict with char catgets(); below.  */
  31692. -#include <assert.h>
  31693. +    which can conflict with char catgets (); below.
  31694. +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
  31695. +    <limits.h> exists even on freestanding compilers.  */
  31696. +#ifdef __STDC__
  31697. +# include <limits.h>
  31698. +#else
  31699. +# include <assert.h>
  31700. +#endif
  31701.  /* Override any gcc2 internal prototype to avoid an error.  */
  31702. +#ifdef __cplusplus
  31703. +extern "C"
  31704. +{
  31705. +#endif
  31706.  /* We use char because int might match the return type of a gcc2
  31707.      builtin and then its argument prototype would still apply.  */
  31708. -char catgets();
  31709. -
  31710. -int main() {
  31711. -
  31712. +char catgets ();
  31713.  /* The GNU C library defines this for functions which it implements
  31714.      to always fail with ENOSYS.  Some functions are actually named
  31715.      something starting with __ and the normal name is an alias.  */
  31716.  #if defined (__stub_catgets) || defined (__stub___catgets)
  31717.  choke me
  31718.  #else
  31719. -catgets();
  31720. +char (*f) () = catgets;
  31721. +#endif
  31722. +#ifdef __cplusplus
  31723. +}
  31724.  #endif
  31725.  
  31726. -; return 0; }
  31727. -EOF
  31728. -if { (eval echo configure:7450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
  31729. -  rm -rf conftest*
  31730. -  eval "ac_cv_func_catgets=yes"
  31731. -else
  31732. -  echo "configure: failed program was:" >&5
  31733. -  cat conftest.$ac_ext >&5
  31734. -  rm -rf conftest*
  31735. -  eval "ac_cv_func_catgets=no"
  31736. -fi
  31737. -rm -f conftest*
  31738. -fi
  31739. -
  31740. -if eval "test \"`echo '$ac_cv_func_'catgets`\" = yes"; then
  31741. -  echo "$ac_t""yes" 1>&6
  31742. -  cat >> confdefs.h <<\EOF
  31743. +int
  31744. +main ()
  31745. +{
  31746. +return f != catgets;
  31747. +  ;
  31748. +  return 0;
  31749. +}
  31750. +_ACEOF
  31751. +rm -f conftest.$ac_objext conftest$ac_exeext
  31752. +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
  31753. +  (eval $ac_link) 2>&5
  31754. +  ac_status=$?
  31755. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31756. +  (exit $ac_status); } &&
  31757. +         { ac_try='test -s conftest$ac_exeext'
  31758. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  31759. +  (eval $ac_try) 2>&5
  31760. +  ac_status=$?
  31761. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  31762. +  (exit $ac_status); }; }; then
  31763. +  ac_cv_func_catgets=yes
  31764. +else
  31765. +  echo "$as_me: failed program was:" >&5
  31766. +sed 's/^/| /' conftest.$ac_ext >&5
  31767. +
  31768. +ac_cv_func_catgets=no
  31769. +fi
  31770. +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
  31771. +fi
  31772. +echo "$as_me:$LINENO: result: $ac_cv_func_catgets" >&5
  31773. +echo "${ECHO_T}$ac_cv_func_catgets" >&6
  31774. +if test $ac_cv_func_catgets = yes; then
  31775. +  cat >>confdefs.h <<\_ACEOF
  31776.  #define HAVE_CATGETS 1
  31777. -EOF
  31778. +_ACEOF
  31779.  
  31780.             INTLOBJS="\$(CATOBJS)"
  31781.             # Extract the first word of "gencat", so it can be a program name with args.
  31782.  set dummy gencat; ac_word=$2
  31783. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31784. -echo "configure:7472: checking for $ac_word" >&5
  31785. -if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then
  31786. -  echo $ac_n "(cached) $ac_c" 1>&6
  31787. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31788. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31789. +if test "${ac_cv_path_GENCAT+set}" = set; then
  31790. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31791.  else
  31792. -  case "$GENCAT" in
  31793. -  /*)
  31794. +  case $GENCAT in
  31795. +  [\\/]* | ?:[\\/]*)
  31796.    ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path.
  31797.    ;;
  31798. -  ?:/*)             
  31799. -  ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a dos path.
  31800. -  ;;
  31801.    *)
  31802. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  31803. -  ac_dummy="$PATH"
  31804. -  for ac_dir in $ac_dummy; do 
  31805. -    test -z "$ac_dir" && ac_dir=.
  31806. -    if test -f $ac_dir/$ac_word; then
  31807. -      ac_cv_path_GENCAT="$ac_dir/$ac_word"
  31808. -      break
  31809. +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  31810. +for as_dir in $PATH
  31811. +do
  31812. +  IFS=$as_save_IFS
  31813. +  test -z "$as_dir" && as_dir=.
  31814. +  for ac_exec_ext in '' $ac_executable_extensions; do
  31815. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  31816. +    ac_cv_path_GENCAT="$as_dir/$ac_word$ac_exec_ext"
  31817. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  31818. +    break 2
  31819.      fi
  31820. -  done
  31821. -  IFS="$ac_save_ifs"
  31822. +done
  31823. +done
  31824. +
  31825.    test -z "$ac_cv_path_GENCAT" && ac_cv_path_GENCAT="no"
  31826.    ;;
  31827.  esac
  31828.  fi
  31829. -GENCAT="$ac_cv_path_GENCAT"
  31830. +GENCAT=$ac_cv_path_GENCAT
  31831. +
  31832.  if test -n "$GENCAT"; then
  31833. -  echo "$ac_t""$GENCAT" 1>&6
  31834. +  echo "$as_me:$LINENO: result: $GENCAT" >&5
  31835. +echo "${ECHO_T}$GENCAT" >&6
  31836.  else
  31837. -  echo "$ac_t""no" 1>&6
  31838. +  echo "$as_me:$LINENO: result: no" >&5
  31839. +echo "${ECHO_T}no" >&6
  31840.  fi
  31841.             if test "$GENCAT" != "no"; then
  31842.           # Extract the first word of "gmsgfmt", so it can be a program name with args.
  31843.  set dummy gmsgfmt; ac_word=$2
  31844. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31845. -echo "configure:7508: checking for $ac_word" >&5
  31846. -if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
  31847. -  echo $ac_n "(cached) $ac_c" 1>&6
  31848. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31849. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31850. +if test "${ac_cv_path_GMSGFMT+set}" = set; then
  31851. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31852.  else
  31853. -  case "$GMSGFMT" in
  31854. -  /*)
  31855. +  case $GMSGFMT in
  31856. +  [\\/]* | ?:[\\/]*)
  31857.    ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
  31858.    ;;
  31859. -  ?:/*)             
  31860. -  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
  31861. -  ;;
  31862.    *)
  31863. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  31864. -  ac_dummy="$PATH"
  31865. -  for ac_dir in $ac_dummy; do 
  31866. -    test -z "$ac_dir" && ac_dir=.
  31867. -    if test -f $ac_dir/$ac_word; then
  31868. -      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
  31869. -      break
  31870. +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  31871. +for as_dir in $PATH
  31872. +do
  31873. +  IFS=$as_save_IFS
  31874. +  test -z "$as_dir" && as_dir=.
  31875. +  for ac_exec_ext in '' $ac_executable_extensions; do
  31876. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  31877. +    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
  31878. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  31879. +    break 2
  31880.      fi
  31881. -  done
  31882. -  IFS="$ac_save_ifs"
  31883. +done
  31884. +done
  31885. +
  31886.    test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no"
  31887.    ;;
  31888.  esac
  31889.  fi
  31890. -GMSGFMT="$ac_cv_path_GMSGFMT"
  31891. +GMSGFMT=$ac_cv_path_GMSGFMT
  31892. +
  31893.  if test -n "$GMSGFMT"; then
  31894. -  echo "$ac_t""$GMSGFMT" 1>&6
  31895. +  echo "$as_me:$LINENO: result: $GMSGFMT" >&5
  31896. +echo "${ECHO_T}$GMSGFMT" >&6
  31897.  else
  31898. -  echo "$ac_t""no" 1>&6
  31899. +  echo "$as_me:$LINENO: result: no" >&5
  31900. +echo "${ECHO_T}no" >&6
  31901.  fi
  31902.  
  31903.           if test "$GMSGFMT" = "no"; then
  31904.             # Extract the first word of "msgfmt", so it can be a program name with args.
  31905.  set dummy msgfmt; ac_word=$2
  31906. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31907. -echo "configure:7545: checking for $ac_word" >&5
  31908. -if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
  31909. -  echo $ac_n "(cached) $ac_c" 1>&6
  31910. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31911. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31912. +if test "${ac_cv_path_GMSGFMT+set}" = set; then
  31913. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31914.  else
  31915.    case "$GMSGFMT" in
  31916.    /*)
  31917. @@ -7567,18 +11222,20 @@
  31918.  fi
  31919.  GMSGFMT="$ac_cv_path_GMSGFMT"
  31920.  if test -n "$GMSGFMT"; then
  31921. -  echo "$ac_t""$GMSGFMT" 1>&6
  31922. +  echo "$as_me:$LINENO: result: $GMSGFMT" >&5
  31923. +echo "${ECHO_T}$GMSGFMT" >&6
  31924.  else
  31925. -  echo "$ac_t""no" 1>&6
  31926. +  echo "$as_me:$LINENO: result: no" >&5
  31927. +echo "${ECHO_T}no" >&6
  31928.  fi
  31929.  
  31930.           fi
  31931.           # Extract the first word of "xgettext", so it can be a program name with args.
  31932.  set dummy xgettext; ac_word=$2
  31933. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31934. -echo "configure:7580: checking for $ac_word" >&5
  31935. -if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
  31936. -  echo $ac_n "(cached) $ac_c" 1>&6
  31937. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31938. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31939. +if test "${ac_cv_path_XGETTEXT+set}" = set; then
  31940. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31941.  else
  31942.    case "$XGETTEXT" in
  31943.    /*)
  31944. @@ -7602,9 +11259,11 @@
  31945.  fi
  31946.  XGETTEXT="$ac_cv_path_XGETTEXT"
  31947.  if test -n "$XGETTEXT"; then
  31948. -  echo "$ac_t""$XGETTEXT" 1>&6
  31949. +  echo "$as_me:$LINENO: result: $XGETTEXT" >&5
  31950. +echo "${ECHO_T}$XGETTEXT" >&6
  31951.  else
  31952. -  echo "$ac_t""no" 1>&6
  31953. +  echo "$as_me:$LINENO: result: no" >&5
  31954. +echo "${ECHO_T}no" >&6
  31955.  fi
  31956.  
  31957.           USE_INCLUDED_LIBINTL=yes
  31958. @@ -7617,8 +11276,6 @@
  31959.           nls_cv_header_intl=intl/libintl.h
  31960.           nls_cv_header_libgt=intl/libgettext.h
  31961.             fi
  31962. -else
  31963. -  echo "$ac_t""no" 1>&6
  31964.  fi
  31965.  
  31966.        fi
  31967. @@ -7633,10 +11290,10 @@
  31968.                  INTLOBJS="\$(GETTOBJS)"
  31969.          # Extract the first word of "msgfmt", so it can be a program name with args.
  31970.  set dummy msgfmt; ac_word=$2
  31971. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31972. -echo "configure:7638: checking for $ac_word" >&5
  31973. -if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
  31974. -  echo $ac_n "(cached) $ac_c" 1>&6
  31975. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  31976. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  31977. +if test "${ac_cv_path_MSGFMT+set}" = set; then
  31978. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  31979.  else
  31980.    case "$MSGFMT" in
  31981.    /*)
  31982. @@ -7660,53 +11317,59 @@
  31983.  fi
  31984.  MSGFMT="$ac_cv_path_MSGFMT"
  31985.  if test -n "$MSGFMT"; then
  31986. -  echo "$ac_t""$MSGFMT" 1>&6
  31987. +  echo "$as_me:$LINENO: result: $MSGFMT" >&5
  31988. +echo "${ECHO_T}$MSGFMT" >&6
  31989.  else
  31990. -  echo "$ac_t""no" 1>&6
  31991. +  echo "$as_me:$LINENO: result: no" >&5
  31992. +echo "${ECHO_T}no" >&6
  31993.  fi
  31994.  
  31995.          # Extract the first word of "gmsgfmt", so it can be a program name with args.
  31996.  set dummy gmsgfmt; ac_word=$2
  31997. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  31998. -echo "configure:7672: checking for $ac_word" >&5
  31999. -if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
  32000. -  echo $ac_n "(cached) $ac_c" 1>&6
  32001. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  32002. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  32003. +if test "${ac_cv_path_GMSGFMT+set}" = set; then
  32004. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  32005.  else
  32006. -  case "$GMSGFMT" in
  32007. -  /*)
  32008. +  case $GMSGFMT in
  32009. +  [\\/]* | ?:[\\/]*)
  32010.    ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
  32011.    ;;
  32012. -  ?:/*)             
  32013. -  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
  32014. -  ;;
  32015.    *)
  32016. -  IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS=":"
  32017. -  ac_dummy="$PATH"
  32018. -  for ac_dir in $ac_dummy; do 
  32019. -    test -z "$ac_dir" && ac_dir=.
  32020. -    if test -f $ac_dir/$ac_word; then
  32021. -      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
  32022. -      break
  32023. +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  32024. +for as_dir in $PATH
  32025. +do
  32026. +  IFS=$as_save_IFS
  32027. +  test -z "$as_dir" && as_dir=.
  32028. +  for ac_exec_ext in '' $ac_executable_extensions; do
  32029. +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
  32030. +    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
  32031. +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
  32032. +    break 2
  32033.      fi
  32034. -  done
  32035. -  IFS="$ac_save_ifs"
  32036. +done
  32037. +done
  32038. +
  32039.    test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
  32040.    ;;
  32041.  esac
  32042.  fi
  32043. -GMSGFMT="$ac_cv_path_GMSGFMT"
  32044. +GMSGFMT=$ac_cv_path_GMSGFMT
  32045. +
  32046.  if test -n "$GMSGFMT"; then
  32047. -  echo "$ac_t""$GMSGFMT" 1>&6
  32048. +  echo "$as_me:$LINENO: result: $GMSGFMT" >&5
  32049. +echo "${ECHO_T}$GMSGFMT" >&6
  32050.  else
  32051. -  echo "$ac_t""no" 1>&6
  32052. +  echo "$as_me:$LINENO: result: no" >&5
  32053. +echo "${ECHO_T}no" >&6
  32054.  fi
  32055.  
  32056.          # Extract the first word of "xgettext", so it can be a program name with args.
  32057.  set dummy xgettext; ac_word=$2
  32058. -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
  32059. -echo "configure:7708: checking for $ac_word" >&5
  32060. -if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
  32061. -  echo $ac_n "(cached) $ac_c" 1>&6
  32062. +echo "$as_me:$LINENO: checking for $ac_word" >&5
  32063. +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
  32064. +if test "${ac_cv_path_XGETTEXT+set}" = set; then
  32065. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  32066.  else
  32067.    case "$XGETTEXT" in
  32068.    /*)
  32069. @@ -7730,9 +11393,11 @@
  32070.  fi
  32071.  XGETTEXT="$ac_cv_path_XGETTEXT"
  32072.  if test -n "$XGETTEXT"; then
  32073. -  echo "$ac_t""$XGETTEXT" 1>&6
  32074. +  echo "$as_me:$LINENO: result: $XGETTEXT" >&5
  32075. +echo "${ECHO_T}$XGETTEXT" >&6
  32076.  else
  32077. -  echo "$ac_t""no" 1>&6
  32078. +  echo "$as_me:$LINENO: result: no" >&5
  32079. +echo "${ECHO_T}no" >&6
  32080.  fi
  32081.  
  32082.          
  32083. @@ -7751,7 +11416,8 @@
  32084.              if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
  32085.        : ;
  32086.      else
  32087. -      echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6
  32088. +      echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
  32089. +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
  32090.        XGETTEXT=":"
  32091.      fi
  32092.        fi
  32093. @@ -7763,7 +11429,16 @@
  32094.        nls_cv_header_intl=intl/libintl.h
  32095.        nls_cv_header_libgt=intl/libgettext.h
  32096.      fi
  32097. +    ac_sources="$nls_cv_header_libgt"
  32098. +ac_dests="$nls_cv_header_intl"
  32099. +while test -n "$ac_sources"; do
  32100. +  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
  32101. +  set $ac_sources; ac_source=$1; shift; ac_sources=$*
  32102. +  ac_config_links_1="$ac_config_links_1 $ac_dest:$ac_source"
  32103. +done
  32104. +          ac_config_links="$ac_config_links $ac_config_links_1"
  32105.      
  32106. +              ac_config_commands="$ac_config_commands default-1"
  32107.      
  32108.  
  32109.  
  32110. @@ -7796,8 +11471,8 @@
  32111.       if test "x$ALL_LINGUAS" = "x"; then
  32112.         LINGUAS=
  32113.       else
  32114. -       echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
  32115. -echo "configure:7801: checking for catalogs to be installed" >&5
  32116. +       echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
  32117. +echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
  32118.         NEW_LINGUAS=
  32119.         for lang in ${LINGUAS=$ALL_LINGUAS}; do
  32120.           case "$ALL_LINGUAS" in
  32121. @@ -7805,7 +11480,8 @@
  32122.           esac
  32123.         done
  32124.         LINGUAS=$NEW_LINGUAS
  32125. -       echo "$ac_t""$LINGUAS" 1>&6
  32126. +       echo "$as_me:$LINENO: result: $LINGUAS" >&5
  32127. +echo "${ECHO_T}$LINGUAS" >&6
  32128.       fi
  32129.  
  32130.            if test -n "$LINGUAS"; then
  32131. @@ -7823,38 +11499,139 @@
  32132.  
  32133.              test -d intl || mkdir intl
  32134.     if test "$CATOBJEXT" = ".cat"; then
  32135. -     ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
  32136. -echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
  32137. -echo "configure:7829: checking for linux/version.h" >&5
  32138. -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  32139. -  echo $ac_n "(cached) $ac_c" 1>&6
  32140. -else
  32141. -  cat > conftest.$ac_ext <<EOF
  32142. -#line 7834 "configure"
  32143. -#include "confdefs.h"
  32144. +     if test "${ac_cv_header_linux_version_h+set}" = set; then
  32145. +  echo "$as_me:$LINENO: checking for linux/version.h" >&5
  32146. +echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6
  32147. +if test "${ac_cv_header_linux_version_h+set}" = set; then
  32148. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  32149. +fi
  32150. +echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5
  32151. +echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6
  32152. +else
  32153. +  # Is the header compilable?
  32154. +echo "$as_me:$LINENO: checking linux/version.h usability" >&5
  32155. +echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6
  32156. +cat >conftest.$ac_ext <<_ACEOF
  32157. +#line $LINENO "configure"
  32158. +/* confdefs.h.  */
  32159. +_ACEOF
  32160. +cat confdefs.h >>conftest.$ac_ext
  32161. +cat >>conftest.$ac_ext <<_ACEOF
  32162. +/* end confdefs.h.  */
  32163. +$ac_includes_default
  32164.  #include <linux/version.h>
  32165. -EOF
  32166. -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
  32167. -{ (eval echo configure:7839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  32168. -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  32169. -if test -z "$ac_err"; then
  32170. -  rm -rf conftest*
  32171. -  eval "ac_cv_header_$ac_safe=yes"
  32172. -else
  32173. -  echo "$ac_err" >&5
  32174. -  echo "configure: failed program was:" >&5
  32175. -  cat conftest.$ac_ext >&5
  32176. -  rm -rf conftest*
  32177. -  eval "ac_cv_header_$ac_safe=no"
  32178. +_ACEOF
  32179. +rm -f conftest.$ac_objext
  32180. +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
  32181. +  (eval $ac_compile) 2>&5
  32182. +  ac_status=$?
  32183. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  32184. +  (exit $ac_status); } &&
  32185. +         { ac_try='test -s conftest.$ac_objext'
  32186. +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  32187. +  (eval $ac_try) 2>&5
  32188. +  ac_status=$?
  32189. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  32190. +  (exit $ac_status); }; }; then
  32191. +  ac_header_compiler=yes
  32192. +else
  32193. +  echo "$as_me: failed program was:" >&5
  32194. +sed 's/^/| /' conftest.$ac_ext >&5
  32195. +
  32196. +ac_header_compiler=no
  32197. +fi
  32198. +rm -f conftest.$ac_objext conftest.$ac_ext
  32199. +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
  32200. +echo "${ECHO_T}$ac_header_compiler" >&6
  32201. +
  32202. +# Is the header present?
  32203. +echo "$as_me:$LINENO: checking linux/version.h presence" >&5
  32204. +echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6
  32205. +cat >conftest.$ac_ext <<_ACEOF
  32206. +#line $LINENO "configure"
  32207. +/* confdefs.h.  */
  32208. +_ACEOF
  32209. +cat confdefs.h >>conftest.$ac_ext
  32210. +cat >>conftest.$ac_ext <<_ACEOF
  32211. +/* end confdefs.h.  */
  32212. +#include <linux/version.h>
  32213. +_ACEOF
  32214. +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
  32215. +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
  32216. +  ac_status=$?
  32217. +  grep -v '^ *+' conftest.er1 >conftest.err
  32218. +  rm -f conftest.er1
  32219. +  cat conftest.err >&5
  32220. +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
  32221. +  (exit $ac_status); } >/dev/null; then
  32222. +  if test -s conftest.err; then
  32223. +    ac_cpp_err=$ac_c_preproc_warn_flag
  32224. +  else
  32225. +    ac_cpp_err=
  32226. +  fi
  32227. +else
  32228. +  ac_cpp_err=yes
  32229. +fi
  32230. +if test -z "$ac_cpp_err"; then
  32231. +  ac_header_preproc=yes
  32232. +else
  32233. +  echo "$as_me: failed program was:" >&5
  32234. +sed 's/^/| /' conftest.$ac_ext >&5
  32235. +
  32236. +  ac_header_preproc=no
  32237. +fi
  32238. +rm -f conftest.err conftest.$ac_ext
  32239. +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
  32240. +echo "${ECHO_T}$ac_header_preproc" >&6
  32241. +
  32242. +# So?  What about this header?
  32243. +case $ac_header_compiler:$ac_header_preproc in
  32244. +  yes:no )
  32245. +    { echo "$as_me:$LINENO: WARNING: linux/version.h: accepted by the compiler, rejected by the preprocessor!" >&5
  32246. +echo "$as_me: WARNING: linux/version.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
  32247. +    { echo "$as_me:$LINENO: WARNING: linux/version.h: proceeding with the preprocessor's result" >&5
  32248. +echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;}
  32249. +    (
  32250. +      cat <<\_ASBOX
  32251. +## ------------------------------------ ##
  32252. +## Report this to bug-autoconf@gnu.org. ##
  32253. +## ------------------------------------ ##
  32254. +_ASBOX
  32255. +    ) |
  32256. +      sed "s/^/$as_me: WARNING:     /" >&2
  32257. +    ;;
  32258. +  no:yes )
  32259. +    { echo "$as_me:$LINENO: WARNING: linux/version.h: present but cannot be compiled" >&5
  32260. +echo "$as_me: WARNING: linux/version.h: present but cannot be compiled" >&2;}
  32261. +    { echo "$as_me:$LINENO: WARNING: linux/version.h: check for missing prerequisite headers?" >&5
  32262. +echo "$as_me: WARNING: linux/version.h: check for missing prerequisite headers?" >&2;}
  32263. +    { echo "$as_me:$LINENO: WARNING: linux/version.h: proceeding with the preprocessor's result" >&5
  32264. +echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;}
  32265. +    (
  32266. +      cat <<\_ASBOX
  32267. +## ------------------------------------ ##
  32268. +## Report this to bug-autoconf@gnu.org. ##
  32269. +## ------------------------------------ ##
  32270. +_ASBOX
  32271. +    ) |
  32272. +      sed "s/^/$as_me: WARNING:     /" >&2
  32273. +    ;;
  32274. +esac
  32275. +echo "$as_me:$LINENO: checking for linux/version.h" >&5
  32276. +echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6
  32277. +if test "${ac_cv_header_linux_version_h+set}" = set; then
  32278. +  echo $ECHO_N "(cached) $ECHO_C" >&6
  32279. +else
  32280. +  ac_cv_header_linux_version_h=$ac_header_preproc
  32281.  fi
  32282. -rm -f conftest*
  32283. +echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5
  32284. +echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6
  32285. +
  32286.  fi
  32287. -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  32288. -  echo "$ac_t""yes" 1>&6
  32289. +if test $ac_cv_header_linux_version_h = yes; then
  32290.    msgformat=linux
  32291.  else
  32292. -  echo "$ac_t""no" 1>&6
  32293. -msgformat=xopen
  32294. +  msgformat=xopen
  32295.  fi
  32296.  
  32297.  
  32298. @@ -8068,8 +11845,8 @@
  32299.  fi
  32300.  
  32301.  # Figure out what assembler alignment features are present.
  32302. -echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
  32303. -echo "configure:8073: checking assembler alignment features" >&5
  32304. +echo "$as_me:$LINENO: checking assembler alignment features" >&5
  32305. +echo $ECHO_N "checking assembler alignment features... $ECHO_C" >&6
  32306.  gcc_cv_as=
  32307.  gcc_cv_as_alignment_features=
  32308.  gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
  32309. @@ -8096,18 +11873,18 @@
  32310.          # bytes to skip when using .p2align.
  32311.          if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 6 -o "$gcc_cv_gas_major_version" -gt 2; then
  32312.              gcc_cv_as_alignment_features=".balign and .p2align"
  32313. -            cat >> confdefs.h <<\EOF
  32314. +            cat >>confdefs.h <<\_ACEOF
  32315.  #define HAVE_GAS_BALIGN_AND_P2ALIGN 1
  32316. -EOF
  32317. +_ACEOF
  32318.  
  32319.          fi
  32320.          # Gas version 2.8 and later support specifying the maximum
  32321.          # bytes to skip when using .p2align.
  32322.          if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 8 -o "$gcc_cv_gas_major_version" -gt 2; then
  32323.              gcc_cv_as_alignment_features=".p2align including maximum skip"
  32324. -            cat >> confdefs.h <<\EOF
  32325. +            cat >>confdefs.h <<\_ACEOF
  32326.  #define HAVE_GAS_MAX_SKIP_P2ALIGN 1
  32327. -EOF
  32328. +_ACEOF
  32329.  
  32330.          fi
  32331.      fi
  32332. @@ -8169,9 +11946,9 @@
  32333.      echo ".p2align  2" >> conftest.s
  32334.      if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
  32335.          gcc_cv_as_alignment_features=".balign and .p2align"
  32336. -        cat >> confdefs.h <<\EOF
  32337. +        cat >>confdefs.h <<\_ACEOF
  32338.  #define HAVE_GAS_BALIGN_AND_P2ALIGN 1
  32339. -EOF
  32340. +_ACEOF
  32341.  
  32342.      fi
  32343.      rm -f conftest.s conftest.o
  32344. @@ -8180,17 +11957,18 @@
  32345.      echo ".p2align 4,,7" > conftest.s
  32346.      if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
  32347.          gcc_cv_as_alignment_features=".p2align including maximum skip"
  32348. -        cat >> confdefs.h <<\EOF
  32349. +        cat >>confdefs.h <<\_ACEOF
  32350.  #define HAVE_GAS_MAX_SKIP_P2ALIGN 1
  32351. -EOF
  32352. +_ACEOF
  32353.  
  32354.      fi
  32355.      rm -f conftest.s conftest.o
  32356.  fi
  32357. -echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
  32358. +echo "$as_me:$LINENO: result: $gcc_cv_as_alignment_features" >&5
  32359. +echo "${ECHO_T}$gcc_cv_as_alignment_features" >&6
  32360.  
  32361. -echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
  32362. -echo "configure:8194: checking assembler subsection support" >&5
  32363. +echo "$as_me:$LINENO: checking assembler subsection support" >&5
  32364. +echo $ECHO_N "checking assembler subsection support... $ECHO_C" >&6
  32365.  gcc_cv_as_subsections=
  32366.  if test x$gcc_cv_as != x; then
  32367.      # Check if we have .subsection
  32368. @@ -8217,9 +11995,9 @@
  32369.                      :
  32370.                  else
  32371.                      gcc_cv_as_subsections="working .subsection -1"
  32372. -                    cat >> confdefs.h <<\EOF
  32373. +                    cat >>confdefs.h <<\_ACEOF
  32374.  #define HAVE_GAS_SUBSECTION_ORDERING 1
  32375. -EOF
  32376. +_ACEOF
  32377.  
  32378.                  fi
  32379.              fi
  32380. @@ -8227,10 +12005,11 @@
  32381.      fi
  32382.      rm -f conftest.s conftest.o conftest.nm1 conftest.nm2
  32383.  fi
  32384. -echo "$ac_t""$gcc_cv_as_subsections" 1>&6
  32385. +echo "$as_me:$LINENO: result: $gcc_cv_as_subsections" >&5
  32386. +echo "${ECHO_T}$gcc_cv_as_subsections" >&6
  32387.  
  32388. -echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
  32389. -echo "configure:8234: checking assembler instructions" >&5
  32390. +echo "$as_me:$LINENO: checking assembler instructions" >&5
  32391. +echo $ECHO_N "checking assembler instructions... $ECHO_C" >&6
  32392.  gcc_cv_as_instructions=
  32393.  if test x$gcc_cv_as != x; then
  32394.      set "filds fists" "filds mem; fists mem"
  32395. @@ -8239,16 +12018,17 @@
  32396.          echo "$2" > conftest.s
  32397.          if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
  32398.              gcc_cv_as_instructions=${gcc_cv_as_instructions}$1" "
  32399. -            cat >> confdefs.h <<EOF
  32400. +            cat >>confdefs.h <<_ACEOF
  32401.  #define HAVE_GAS_`echo "$1" | tr 'a-z ' 'A-Z_'` 1
  32402. -EOF
  32403. +_ACEOF
  32404.  
  32405.          fi
  32406.          shift 2
  32407.      done
  32408.      rm -f conftest.s conftest.o
  32409.  fi
  32410. -echo "$ac_t""$gcc_cv_as_instructions" 1>&6
  32411. +echo "$as_me:$LINENO: result: $gcc_cv_as_instructions" >&5
  32412. +echo "${ECHO_T}$gcc_cv_as_instructions" >&6
  32413.  
  32414.  # Figure out what language subdirectories are present.
  32415.  # Look if the user specified --enable-languages="..."; if not, use
  32416. @@ -8623,519 +12403,533 @@
  32417.  
  32418.  # Create the Makefile
  32419.  # and configure language subdirectories
  32420. -trap '' 1 2 15
  32421. -cat > confcache <<\EOF
  32422. +          ac_config_files="$ac_config_files $all_outputs"
  32423. +          ac_config_commands="$ac_config_commands default"
  32424. +cat >confcache <<\_ACEOF
  32425.  # This file is a shell script that caches the results of configure
  32426.  # tests run on this system so they can be shared between configure
  32427. -# scripts and configure runs.  It is not useful on other systems.
  32428. -# If it contains results you don't want to keep, you may remove or edit it.
  32429. +# scripts and configure runs, see configure's option --config-cache.
  32430. +# It is not useful on other systems.  If it contains results you don't
  32431. +# want to keep, you may remove or edit it.
  32432.  #
  32433. -# By default, configure uses ./config.cache as the cache file,
  32434. -# creating it if it does not exist already.  You can give configure
  32435. -# the --cache-file=FILE option to use a different cache file; that is
  32436. -# what configure does when it calls configure scripts in
  32437. -# subdirectories, so they share the cache.
  32438. -# Giving --cache-file=/dev/null disables caching, for debugging configure.
  32439. -# config.status only pays attention to the cache file if you give it the
  32440. -# --recheck option to rerun configure.
  32441. +# config.status only pays attention to the cache file if you give it
  32442. +# the --recheck option to rerun configure.
  32443.  #
  32444. -EOF
  32445. +# `ac_cv_env_foo' variables (set or unset) will be overridden when
  32446. +# loading this file, other *unset* `ac_cv_foo' will be assigned the
  32447. +# following values.
  32448. +
  32449. +_ACEOF
  32450. +
  32451.  # The following way of writing the cache mishandles newlines in values,
  32452.  # but we know of no workaround that is simple, portable, and efficient.
  32453.  # So, don't put newlines in cache variables' values.
  32454.  # Ultrix sh set writes to stderr and can't be redirected directly,
  32455.  # and sets the high bit in the cache file unless we assign to the vars.
  32456. -(set) 2>&1 |
  32457. +{
  32458. +  (set) 2>&1 |
  32459.    case `(ac_space=' '; set | grep ac_space) 2>&1` in
  32460.    *ac_space=\ *)
  32461. -    # `set' does not quote correctly, so add quotes (double-quote substitution
  32462. -    # turns \\\\ into \\, and sed turns \\ into \).
  32463. +      # `set' does not quote correctly, so add quotes (double-quote
  32464. +      # substitution turns \\\\ into \\, and sed turns \\ into \).
  32465.      sed -n \
  32466. -      -e "s/'/'\\\\''/g" \
  32467. -      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
  32468. +        "s/'/'\\\\''/g;
  32469. +          s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
  32470.      ;;
  32471.    *)
  32472.      # `set' quotes correctly as required by POSIX, so do not add quotes.
  32473. -    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
  32474. +      sed -n \
  32475. +        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
  32476.      ;;
  32477. -  esac >> confcache
  32478. -if cmp -s $cache_file confcache; then
  32479. -  :
  32480. -else
  32481. +    esac;
  32482. +} |
  32483. +  sed '
  32484. +     t clear
  32485. +     : clear
  32486. +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
  32487. +     t end
  32488. +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
  32489. +     : end' >>confcache
  32490. +if diff $cache_file confcache >/dev/null 2>&1; then :; else
  32491.    if test -w $cache_file; then
  32492. -    echo "updating cache $cache_file"
  32493. -    cat confcache > $cache_file
  32494. +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
  32495. +    cat confcache >$cache_file
  32496.    else
  32497.      echo "not updating unwritable cache $cache_file"
  32498.    fi
  32499.  fi
  32500.  rm -f confcache
  32501.  
  32502. -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
  32503. -
  32504.  test "x$prefix" = xNONE && prefix=$ac_default_prefix
  32505.  # Let make expand exec_prefix.
  32506.  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
  32507.  
  32508. -# Any assignment to VPATH causes Sun make to only execute
  32509. -# the first set of double-colon rules, so remove it if not needed.
  32510. -# If there is a colon in the path, we need to keep it.
  32511. +# VPATH may cause trouble with some makes, so we remove $(srcdir),
  32512. +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
  32513. +# trailing colons and then remove the whole line if VPATH becomes empty
  32514. +# (actually we leave an empty line to preserve line numbers).
  32515.  if test "x$srcdir" = x.; then
  32516. -  ac_vpsub='/^[     ]*VPATH[     ]*=[^:]*$/d'
  32517. +  ac_vpsub='/^[     ]*VPATH[     ]*=/{
  32518. +s/:*\$(srcdir):*/:/;
  32519. +s/:*\${srcdir}:*/:/;
  32520. +s/:*@srcdir@:*/:/;
  32521. +s/^\([^=]*=[     ]*\):*/\1/;
  32522. +s/:*$//;
  32523. +s/^[^=]*=[     ]*$//;
  32524. +}'
  32525.  fi
  32526.  
  32527. -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
  32528. -
  32529.  DEFS=-DHAVE_CONFIG_H
  32530.  
  32531. -# Without the "./", some shells look in PATH for config.status.
  32532. -: ${CONFIG_STATUS=./config.status}
  32533. +ac_libobjs=
  32534. +ac_ltlibobjs=
  32535. +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
  32536. +  # 1. Remove the extension, and $U if already installed.
  32537. +  ac_i=`echo "$ac_i" |
  32538. +         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
  32539. +  # 2. Add them.
  32540. +  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
  32541. +  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
  32542. +done
  32543. +LIBOBJS=$ac_libobjs
  32544.  
  32545. -echo creating $CONFIG_STATUS
  32546. -rm -f $CONFIG_STATUS
  32547. -cat > $CONFIG_STATUS <<EOF
  32548. -#! /bin/sh
  32549. -# Generated automatically by configure.
  32550. -# Run this file to recreate the current configuration.
  32551. -# This directory was configured as follows,
  32552. -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
  32553. -#
  32554. -# $0 $ac_configure_args
  32555. -#
  32556. -# Compiler output produced by configure, useful for debugging
  32557. -# configure, is in ./config.log if it exists.
  32558. +LTLIBOBJS=$ac_ltlibobjs
  32559.  
  32560. -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
  32561. -for ac_option
  32562. -do
  32563. -  case "\$ac_option" in
  32564. -  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  32565. -    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
  32566. -    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  32567. -  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
  32568. -    echo "$CONFIG_STATUS generated by autoconf version 2.13"
  32569. -    exit 0 ;;
  32570. -  -help | --help | --hel | --he | --h)
  32571. -    echo "\$ac_cs_usage"; exit 0 ;;
  32572. -  *) echo "\$ac_cs_usage"; exit 1 ;;
  32573. -  esac
  32574. -done
  32575.  
  32576. -ac_given_srcdir=$srcdir
  32577.  
  32578. -trap 'rm -fr `echo "$all_outputs auto-host.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
  32579. -EOF
  32580. -cat >> $CONFIG_STATUS <<EOF
  32581. +: ${CONFIG_STATUS=./config.status}
  32582. +ac_clean_files_save=$ac_clean_files
  32583. +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
  32584. +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
  32585. +echo "$as_me: creating $CONFIG_STATUS" >&6;}
  32586. +cat >$CONFIG_STATUS <<_ACEOF
  32587. +#! $SHELL
  32588. +# Generated by $as_me.
  32589. +# Run this file to recreate the current configuration.
  32590. +# Compiler output produced by configure, useful for debugging
  32591. +# configure, is in config.log if it exists.
  32592.  
  32593. -# Protect against being on the right side of a sed subst in config.status.
  32594. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  32595. - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
  32596. -$ac_vpsub
  32597. -$extrasub
  32598. -s%@SHELL@%$SHELL%g
  32599. -s%@CFLAGS@%$CFLAGS%g
  32600. -s%@CPPFLAGS@%$CPPFLAGS%g
  32601. -s%@CXXFLAGS@%$CXXFLAGS%g
  32602. -s%@FFLAGS@%$FFLAGS%g
  32603. -s%@DEFS@%$DEFS%g
  32604. -s%@LDFLAGS@%$LDFLAGS%g
  32605. -s%@LIBS@%$LIBS%g
  32606. -s%@exec_prefix@%$exec_prefix%g
  32607. -s%@prefix@%$prefix%g
  32608. -s%@program_transform_name@%$program_transform_name%g
  32609. -s%@bindir@%$bindir%g
  32610. -s%@sbindir@%$sbindir%g
  32611. -s%@libexecdir@%$libexecdir%g
  32612. -s%@datadir@%$datadir%g
  32613. -s%@sysconfdir@%$sysconfdir%g
  32614. -s%@sharedstatedir@%$sharedstatedir%g
  32615. -s%@localstatedir@%$localstatedir%g
  32616. -s%@libdir@%$libdir%g
  32617. -s%@includedir@%$includedir%g
  32618. -s%@oldincludedir@%$oldincludedir%g
  32619. -s%@infodir@%$infodir%g
  32620. -s%@mandir@%$mandir%g
  32621. -s%@host@%$host%g
  32622. -s%@host_alias@%$host_alias%g
  32623. -s%@host_cpu@%$host_cpu%g
  32624. -s%@host_vendor@%$host_vendor%g
  32625. -s%@host_os@%$host_os%g
  32626. -s%@target@%$target%g
  32627. -s%@target_alias@%$target_alias%g
  32628. -s%@target_cpu@%$target_cpu%g
  32629. -s%@target_vendor@%$target_vendor%g
  32630. -s%@target_os@%$target_os%g
  32631. -s%@build@%$build%g
  32632. -s%@build_alias@%$build_alias%g
  32633. -s%@build_cpu@%$build_cpu%g
  32634. -s%@build_vendor@%$build_vendor%g
  32635. -s%@build_os@%$build_os%g
  32636. -s%@CC@%$CC%g
  32637. -s%@stage1_warn_cflags@%$stage1_warn_cflags%g
  32638. -s%@SET_MAKE@%$SET_MAKE%g
  32639. -s%@AWK@%$AWK%g
  32640. -s%@LEX@%$LEX%g
  32641. -s%@LEXLIB@%$LEXLIB%g
  32642. -s%@LN@%$LN%g
  32643. -s%@LN_S@%$LN_S%g
  32644. -s%@RANLIB@%$RANLIB%g
  32645. -s%@YACC@%$YACC%g
  32646. -s%@INSTALL@%$INSTALL%g
  32647. -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
  32648. -s%@INSTALL_DATA@%$INSTALL_DATA%g
  32649. -s%@CPP@%$CPP%g
  32650. -s%@gnat@%$gnat%g
  32651. -s%@vfprintf@%$vfprintf%g
  32652. -s%@doprint@%$doprint%g
  32653. -s%@manext@%$manext%g
  32654. -s%@objext@%$objext%g
  32655. -s%@PACKAGE@%$PACKAGE%g
  32656. -s%@VERSION@%$VERSION%g
  32657. -s%@ALLOCA@%$ALLOCA%g
  32658. -s%@USE_NLS@%$USE_NLS%g
  32659. -s%@MSGFMT@%$MSGFMT%g
  32660. -s%@GMSGFMT@%$GMSGFMT%g
  32661. -s%@XGETTEXT@%$XGETTEXT%g
  32662. -s%@GENCAT@%$GENCAT%g
  32663. -s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g
  32664. -s%@CATALOGS@%$CATALOGS%g
  32665. -s%@CATOBJEXT@%$CATOBJEXT%g
  32666. -s%@DATADIRNAME@%$DATADIRNAME%g
  32667. -s%@GMOFILES@%$GMOFILES%g
  32668. -s%@INSTOBJEXT@%$INSTOBJEXT%g
  32669. -s%@INTLDEPS@%$INTLDEPS%g
  32670. -s%@INTLLIBS@%$INTLLIBS%g
  32671. -s%@INTLOBJS@%$INTLOBJS%g
  32672. -s%@POFILES@%$POFILES%g
  32673. -s%@POSUB@%$POSUB%g
  32674. -s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g
  32675. -s%@GT_NO@%$GT_NO%g
  32676. -s%@GT_YES@%$GT_YES%g
  32677. -s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g
  32678. -s%@l@%$l%g
  32679. -s%@gthread_flags@%$gthread_flags%g
  32680. -s%@build_canonical@%$build_canonical%g
  32681. -s%@host_canonical@%$host_canonical%g
  32682. -s%@target_subdir@%$target_subdir%g
  32683. -s%@inhibit_libc@%$inhibit_libc%g
  32684. -s%@sched_prefix@%$sched_prefix%g
  32685. -s%@sched_cflags@%$sched_cflags%g
  32686. -s%@gcc_tooldir@%$gcc_tooldir%g
  32687. -s%@dollar@%$dollar%g
  32688. -s%@objdir@%$objdir%g
  32689. -s%@subdirs@%$subdirs%g
  32690. -s%@all_boot_languages@%$all_boot_languages%g
  32691. -s%@all_compilers@%$all_compilers%g
  32692. -s%@all_diff_excludes@%$all_diff_excludes%g
  32693. -s%@all_headers@%$all_headers%g
  32694. -s%@all_lang_makefiles@%$all_lang_makefiles%g
  32695. -s%@all_languages@%$all_languages%g
  32696. -s%@all_lib2funcs@%$all_lib2funcs%g
  32697. -s%@all_stagestuff@%$all_stagestuff%g
  32698. -s%@build_exeext@%$build_exeext%g
  32699. -s%@build_install_headers_dir@%$build_install_headers_dir%g
  32700. -s%@build_xm_file_list@%$build_xm_file_list%g
  32701. -s%@cc_set_by_configure@%$cc_set_by_configure%g
  32702. -s%@quoted_cc_set_by_configure@%$quoted_cc_set_by_configure%g
  32703. -s%@cpp_install_dir@%$cpp_install_dir%g
  32704. -s%@cpp_main@%$cpp_main%g
  32705. -s%@dep_host_xmake_file@%$dep_host_xmake_file%g
  32706. -s%@dep_tmake_file@%$dep_tmake_file%g
  32707. -s%@extra_c_flags@%$extra_c_flags%g
  32708. -s%@extra_c_objs@%$extra_c_objs%g
  32709. -s%@extra_cpp_objs@%$extra_cpp_objs%g
  32710. -s%@extra_cxx_objs@%$extra_cxx_objs%g
  32711. -s%@extra_headers_list@%$extra_headers_list%g
  32712. -s%@extra_objs@%$extra_objs%g
  32713. -s%@extra_parts@%$extra_parts%g
  32714. -s%@extra_passes@%$extra_passes%g
  32715. -s%@extra_programs@%$extra_programs%g
  32716. -s%@fixinc_defs@%$fixinc_defs%g
  32717. -s%@float_h_file@%$float_h_file%g
  32718. -s%@gcc_gxx_include_dir@%$gcc_gxx_include_dir%g
  32719. -s%@gcc_version@%$gcc_version%g
  32720. -s%@gcc_version_trigger@%$gcc_version_trigger%g
  32721. -s%@host_exeext@%$host_exeext%g
  32722. -s%@host_extra_gcc_objs@%$host_extra_gcc_objs%g
  32723. -s%@host_xm_file_list@%$host_xm_file_list%g
  32724. -s%@install@%$install%g
  32725. -s%@JAVAGC@%$JAVAGC%g
  32726. -s%@lang_options_files@%$lang_options_files%g
  32727. -s%@lang_specs_files@%$lang_specs_files%g
  32728. -s%@lang_tree_files@%$lang_tree_files%g
  32729. -s%@local_prefix@%$local_prefix%g
  32730. -s%@maybe_use_collect2@%$maybe_use_collect2%g
  32731. -s%@md_file@%$md_file%g
  32732. -s%@objc_boehm_gc@%$objc_boehm_gc%g
  32733. -s%@out_file@%$out_file%g
  32734. -s%@out_object_file@%$out_object_file%g
  32735. -s%@stage_prefix_set_by_configure@%$stage_prefix_set_by_configure%g
  32736. -s%@symbolic_link@%$symbolic_link%g
  32737. -s%@thread_file@%$thread_file%g
  32738. -s%@tm_file_list@%$tm_file_list%g
  32739. -s%@will_use_collect2@%$will_use_collect2%g
  32740. -/@target_overrides@/r $target_overrides
  32741. -s%@target_overrides@%%g
  32742. -/@host_overrides@/r $host_overrides
  32743. -s%@host_overrides@%%g
  32744. -s%@cross_defines@%$cross_defines%g
  32745. -/@cross_overrides@/r $cross_overrides
  32746. -s%@cross_overrides@%%g
  32747. -/@build_overrides@/r $build_overrides
  32748. -s%@build_overrides@%%g
  32749. -/@language_fragments@/r $language_fragments
  32750. -s%@language_fragments@%%g
  32751. -/@language_hooks@/r $language_hooks
  32752. -s%@language_hooks@%%g
  32753. +debug=false
  32754. +ac_cs_recheck=false
  32755. +ac_cs_silent=false
  32756. +SHELL=\${CONFIG_SHELL-$SHELL}
  32757. +_ACEOF
  32758. +
  32759. +cat >>$CONFIG_STATUS <<\_ACEOF
  32760. +## --------------------- ##
  32761. +## M4sh Initialization.  ##
  32762. +## --------------------- ##
  32763. +
  32764. +# Be Bourne compatible
  32765. +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  32766. +  emulate sh
  32767. +  NULLCMD=:
  32768. +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  32769. +  # is contrary to our usage.  Disable this feature.
  32770. +  alias -g '${1+"$@"}'='"$@"'
  32771. +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
  32772. +  set -o posix
  32773. +fi
  32774. +
  32775. +# Support unset when possible.
  32776. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
  32777. +  as_unset=unset
  32778. +else
  32779. +  as_unset=false
  32780. +fi
  32781.  
  32782. -CEOF
  32783. -EOF
  32784.  
  32785. -cat >> $CONFIG_STATUS <<\EOF
  32786. +# Work around bugs in pre-3.0 UWIN ksh.
  32787. +$as_unset ENV MAIL MAILPATH
  32788. +PS1='$ '
  32789. +PS2='> '
  32790. +PS4='+ '
  32791.  
  32792. -# Split the substitutions into bite-sized pieces for seds with
  32793. -# small command number limits, like on Digital OSF/1 and HP-UX.
  32794. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
  32795. -ac_file=1 # Number of current file.
  32796. -ac_beg=1 # First line for current file.
  32797. -ac_end=$ac_max_sed_cmds # Line after last line for current file.
  32798. -ac_more_lines=:
  32799. -ac_sed_cmds=""
  32800. -while $ac_more_lines; do
  32801. -  if test $ac_beg -gt 1; then
  32802. -    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  32803. -  else
  32804. -    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  32805. -  fi
  32806. -  if test ! -s conftest.s$ac_file; then
  32807. -    ac_more_lines=false
  32808. -    rm -f conftest.s$ac_file
  32809. -  else
  32810. -    if test -z "$ac_sed_cmds"; then
  32811. -      ac_sed_cmds="sed -f conftest.s$ac_file"
  32812. +# NLS nuisances.
  32813. +for as_var in \
  32814. +  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
  32815. +  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
  32816. +  LC_TELEPHONE LC_TIME
  32817. +do
  32818. +  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
  32819. +    eval $as_var=C; export $as_var
  32820.      else
  32821. -      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
  32822. -    fi
  32823. -    ac_file=`expr $ac_file + 1`
  32824. -    ac_beg=$ac_end
  32825. -    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  32826. +    $as_unset $as_var
  32827.    fi
  32828.  done
  32829. -if test -z "$ac_sed_cmds"; then
  32830. -  ac_sed_cmds=cat
  32831. +
  32832. +# Required to use basename.
  32833. +if expr a : '\(a\)' >/dev/null 2>&1; then
  32834. +  as_expr=expr
  32835. +else
  32836. +  as_expr=false
  32837. +fi
  32838. +
  32839. +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
  32840. +  as_basename=basename
  32841. +else
  32842. +  as_basename=false
  32843.  fi
  32844. -EOF
  32845.  
  32846. -cat >> $CONFIG_STATUS <<EOF
  32847.  
  32848. -CONFIG_FILES=\${CONFIG_FILES-"$all_outputs"}
  32849. -EOF
  32850. -cat >> $CONFIG_STATUS <<\EOF
  32851. -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  32852. -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  32853. -  case "$ac_file" in
  32854. -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  32855. -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  32856. -  *) ac_file_in="${ac_file}.in" ;;
  32857. +# Name of the executable.
  32858. +as_me=`$as_basename "$0" ||
  32859. +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
  32860. +     X"$0" : 'X\(//\)$' \| \
  32861. +     X"$0" : 'X\(/\)$' \| \
  32862. +     .     : '\(.\)' 2>/dev/null ||
  32863. +echo X/"$0" |
  32864. +    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
  32865. +        /^X\/\(\/\/\)$/{ s//\1/; q; }
  32866. +        /^X\/\(\/\).*/{ s//\1/; q; }
  32867. +        s/.*/./; q'`
  32868. +
  32869. +
  32870. +# PATH needs CR, and LINENO needs CR and PATH.
  32871. +# Avoid depending upon Character Ranges.
  32872. +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
  32873. +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  32874. +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
  32875. +as_cr_digits='0123456789'
  32876. +as_cr_alnum=$as_cr_Letters$as_cr_digits
  32877. +
  32878. +# The user is always right.
  32879. +if test "${PATH_SEPARATOR+set}" != set; then
  32880. +  echo "#! /bin/sh" >conf$$.sh
  32881. +  echo  "exit 0"   >>conf$$.sh
  32882. +  chmod +x conf$$.sh
  32883. +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
  32884. +    PATH_SEPARATOR=';'
  32885. +  else
  32886. +    PATH_SEPARATOR=:
  32887. +  fi
  32888. +  rm -f conf$$.sh
  32889. +fi
  32890. +
  32891. +
  32892. +  as_lineno_1=$LINENO
  32893. +  as_lineno_2=$LINENO
  32894. +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  32895. +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  32896. +  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  32897. +  # Find who we are.  Look in the path if we contain no path at all
  32898. +  # relative or not.
  32899. +  case $0 in
  32900. +    *[\\/]* ) as_myself=$0 ;;
  32901. +    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  32902. +for as_dir in $PATH
  32903. +do
  32904. +  IFS=$as_save_IFS
  32905. +  test -z "$as_dir" && as_dir=.
  32906. +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  32907. +done
  32908. +
  32909. +       ;;
  32910. +  esac
  32911. +  # We did not find ourselves, most probably we were run as `sh COMMAND'
  32912. +  # in which case we are not to be found in the path.
  32913. +  if test "x$as_myself" = x; then
  32914. +    as_myself=$0
  32915. +  fi
  32916. +  if test ! -f "$as_myself"; then
  32917. +    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
  32918. +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
  32919. +   { (exit 1); exit 1; }; }
  32920. +  fi
  32921. +  case $CONFIG_SHELL in
  32922. +  '')
  32923. +    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  32924. +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
  32925. +do
  32926. +  IFS=$as_save_IFS
  32927. +  test -z "$as_dir" && as_dir=.
  32928. +  for as_base in sh bash ksh sh5; do
  32929. +     case $as_dir in
  32930. +     /*)
  32931. +       if ("$as_dir/$as_base" -c '
  32932. +  as_lineno_1=$LINENO
  32933. +  as_lineno_2=$LINENO
  32934. +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  32935. +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  32936. +  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  32937. +         $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  32938. +         $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  32939. +         CONFIG_SHELL=$as_dir/$as_base
  32940. +         export CONFIG_SHELL
  32941. +         exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  32942. +       fi;;
  32943. +     esac
  32944. +       done
  32945. +done
  32946. +;;
  32947.    esac
  32948.  
  32949. -  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
  32950. -
  32951. -  # Remove last slash and all that follows it.  Not all systems have dirname.
  32952. -  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  32953. -  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  32954. -    # The file is in a subdirectory.
  32955. -    test ! -d "$ac_dir" && mkdir "$ac_dir"
  32956. -    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
  32957. -    # A "../" for each directory in $ac_dir_suffix.
  32958. -    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  32959. +  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
  32960. +  # uniformly replaced by the line number.  The first 'sed' inserts a
  32961. +  # line-number line before each line; the second 'sed' does the real
  32962. +  # work.  The second script uses 'N' to pair each line-number line
  32963. +  # with the numbered line, and appends trailing '-' during
  32964. +  # substitution so that $LINENO is not a special case at line end.
  32965. +  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  32966. +  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  32967. +  sed '=' <$as_myself |
  32968. +    sed '
  32969. +      N
  32970. +      s,$,-,
  32971. +      : loop
  32972. +      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  32973. +      t loop
  32974. +      s,-$,,
  32975. +      s,^['$as_cr_digits']*\n,,
  32976. +    ' >$as_me.lineno &&
  32977. +  chmod +x $as_me.lineno ||
  32978. +    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
  32979. +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
  32980. +   { (exit 1); exit 1; }; }
  32981. +
  32982. +  # Don't try to exec as it changes $[0], causing all sort of problems
  32983. +  # (the dirname of $[0] is not the place where we might find the
  32984. +  # original and so on.  Autoconf is especially sensible to this).
  32985. +  . ./$as_me.lineno
  32986. +  # Exit status is that of the last command.
  32987. +  exit
  32988. +}
  32989. +
  32990. +
  32991. +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  32992. +  *c*,-n*) ECHO_N= ECHO_C='
  32993. +' ECHO_T='    ' ;;
  32994. +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  32995. +  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  32996. +esac
  32997. +
  32998. +if expr a : '\(a\)' >/dev/null 2>&1; then
  32999. +  as_expr=expr
  33000. +else
  33001. +  as_expr=false
  33002. +fi
  33003. +
  33004. +rm -f conf$$ conf$$.exe conf$$.file
  33005. +echo >conf$$.file
  33006. +if ln -s conf$$.file conf$$ 2>/dev/null; then
  33007. +  # We could just check for DJGPP; but this test a) works b) is more generic
  33008. +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  33009. +  if test -f conf$$.exe; then
  33010. +    # Don't use ln at all; we don't have any links
  33011. +    as_ln_s='cp -p'
  33012.    else
  33013. -    ac_dir_suffix= ac_dots=
  33014. +    as_ln_s='ln -s'
  33015.    fi
  33016. +elif ln conf$$.file conf$$ 2>/dev/null; then
  33017. +  as_ln_s=ln
  33018. +else
  33019. +  as_ln_s='cp -p'
  33020. +fi
  33021. +rm -f conf$$ conf$$.exe conf$$.file
  33022.  
  33023. -  case "$ac_given_srcdir" in
  33024. -  .)  srcdir=.
  33025. -      if test -z "$ac_dots"; then top_srcdir=.
  33026. -      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  33027. -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  33028. -  *) # Relative path.
  33029. -    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  33030. -    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  33031. -  esac
  33032. +if mkdir -p . 2>/dev/null; then
  33033. +  as_mkdir_p=:
  33034. +else
  33035. +  as_mkdir_p=false
  33036. +fi
  33037.  
  33038. +as_executable_p="test -f"
  33039.  
  33040. -  echo creating "$ac_file"
  33041. -  rm -f "$ac_file"
  33042. -  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  33043. -  case "$ac_file" in
  33044. -  *Makefile*) ac_comsub="1i\\
  33045. -# $configure_input" ;;
  33046. -  *) ac_comsub= ;;
  33047. -  esac
  33048. +# Sed expression to map a string onto a valid CPP name.
  33049. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
  33050.  
  33051. -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  33052. -  sed -e "$ac_comsub
  33053. -s%@configure_input@%$configure_input%g
  33054. -s%@srcdir@%$srcdir%g
  33055. -s%@top_srcdir@%$top_srcdir%g
  33056. -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
  33057. -fi; done
  33058. -rm -f conftest.s*
  33059. +# Sed expression to map a string onto a valid variable name.
  33060. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
  33061.  
  33062. -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
  33063. -# NAME is the cpp macro being defined and VALUE is the value it is being given.
  33064. -#
  33065. -# ac_d sets the value in "#define NAME VALUE" lines.
  33066. -ac_dA='s%^\([     ]*\)#\([     ]*define[     ][     ]*\)'
  33067. -ac_dB='\([     ][     ]*\)[^     ]*%\1#\2'
  33068. -ac_dC='\3'
  33069. -ac_dD='%g'
  33070. -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
  33071. -ac_uA='s%^\([     ]*\)#\([     ]*\)undef\([     ][     ]*\)'
  33072. -ac_uB='\([     ]\)%\1#\2define\3'
  33073. -ac_uC=' '
  33074. -ac_uD='\4%g'
  33075. -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  33076. -ac_eA='s%^\([     ]*\)#\([     ]*\)undef\([     ][     ]*\)'
  33077. -ac_eB='$%\1#\2define\3'
  33078. -ac_eC=' '
  33079. -ac_eD='%g'
  33080.  
  33081. -if test "${CONFIG_HEADERS+set}" != set; then
  33082. -EOF
  33083. -cat >> $CONFIG_STATUS <<EOF
  33084. -  CONFIG_HEADERS="auto-host.h:config.in"
  33085. -EOF
  33086. -cat >> $CONFIG_STATUS <<\EOF
  33087. +# IFS
  33088. +# We need space, tab and new line, in precisely that order.
  33089. +as_nl='
  33090. +'
  33091. +IFS="     $as_nl"
  33092. +
  33093. +# CDPATH.
  33094. +$as_unset CDPATH
  33095. +
  33096. +exec 6>&1
  33097. +
  33098. +# Open the log real soon, to keep \$[0] and so on meaningful, and to
  33099. +# report actual input values of CONFIG_FILES etc. instead of their
  33100. +# values after options handling.  Logging --version etc. is OK.
  33101. +exec 5>>config.log
  33102. +{
  33103. +  echo
  33104. +  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
  33105. +## Running $as_me. ##
  33106. +_ASBOX
  33107. +} >&5
  33108. +cat >&5 <<_CSEOF
  33109. +
  33110. +This file was extended by $as_me, which was
  33111. +generated by GNU Autoconf 2.57.  Invocation command line was
  33112. +
  33113. +  CONFIG_FILES    = $CONFIG_FILES
  33114. +  CONFIG_HEADERS  = $CONFIG_HEADERS
  33115. +  CONFIG_LINKS    = $CONFIG_LINKS
  33116. +  CONFIG_COMMANDS = $CONFIG_COMMANDS
  33117. +  $ $0 $@
  33118. +
  33119. +_CSEOF
  33120. +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
  33121. +echo >&5
  33122. +_ACEOF
  33123. +
  33124. +# Files that config.status was made for.
  33125. +if test -n "$ac_config_files"; then
  33126. +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
  33127.  fi
  33128. -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  33129. -  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  33130. -  case "$ac_file" in
  33131. -  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
  33132. -       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  33133. -  *) ac_file_in="${ac_file}.in" ;;
  33134. -  esac
  33135.  
  33136. -  echo creating $ac_file
  33137. +if test -n "$ac_config_headers"; then
  33138. +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
  33139. +fi
  33140.  
  33141. -  rm -f conftest.frag conftest.in conftest.out
  33142. -  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  33143. -  cat $ac_file_inputs > conftest.in
  33144. +if test -n "$ac_config_links"; then
  33145. +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
  33146. +fi
  33147.  
  33148. -EOF
  33149. +if test -n "$ac_config_commands"; then
  33150. +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
  33151. +fi
  33152.  
  33153. -# Transform confdefs.h into a sed script conftest.vals that substitutes
  33154. -# the proper values into config.h.in to produce config.h.  And first:
  33155. -# Protect against being on the right side of a sed subst in config.status.
  33156. -# Protect against being in an unquoted here document in config.status.
  33157. -rm -f conftest.vals
  33158. -cat > conftest.hdr <<\EOF
  33159. -s/[\\&%]/\\&/g
  33160. -s%[\\$`]%\\&%g
  33161. -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
  33162. -s%ac_d%ac_u%gp
  33163. -s%ac_u%ac_e%gp
  33164. -EOF
  33165. -sed -n -f conftest.hdr confdefs.h > conftest.vals
  33166. -rm -f conftest.hdr
  33167. +cat >>$CONFIG_STATUS <<\_ACEOF
  33168.  
  33169. -# This sed command replaces #undef with comments.  This is necessary, for
  33170. -# example, in the case of _POSIX_SOURCE, which is predefined and required
  33171. -# on some systems where configure will not decide to define it.
  33172. -cat >> conftest.vals <<\EOF
  33173. -s%^[     ]*#[     ]*undef[     ][     ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
  33174. -EOF
  33175. +ac_cs_usage="\
  33176. +\`$as_me' instantiates files from templates according to the
  33177. +current configuration.
  33178.  
  33179. -# Break up conftest.vals because some shells have a limit on
  33180. -# the size of here documents, and old seds have small limits too.
  33181. +Usage: $0 [OPTIONS] [FILE]...
  33182.  
  33183. -rm -f conftest.tail
  33184. -while :
  33185. -do
  33186. -  ac_lines=`grep -c . conftest.vals`
  33187. -  # grep -c gives empty output for an empty file on some AIX systems.
  33188. -  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  33189. -  # Write a limited-size here document to conftest.frag.
  33190. -  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  33191. -  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  33192. -  echo 'CEOF
  33193. -  sed -f conftest.frag conftest.in > conftest.out
  33194. -  rm -f conftest.in
  33195. -  mv conftest.out conftest.in
  33196. -' >> $CONFIG_STATUS
  33197. -  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  33198. -  rm -f conftest.vals
  33199. -  mv conftest.tail conftest.vals
  33200. -done
  33201. -rm -f conftest.vals
  33202. -
  33203. -cat >> $CONFIG_STATUS <<\EOF
  33204. -  rm -f conftest.frag conftest.h
  33205. -  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  33206. -  cat conftest.in >> conftest.h
  33207. -  rm -f conftest.in
  33208. -  if cmp -s $ac_file conftest.h 2>/dev/null; then
  33209. -    echo "$ac_file is unchanged"
  33210. -    rm -f conftest.h
  33211. -  else
  33212. -    # Remove last slash and all that follows it.  Not all systems have dirname.
  33213. -      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  33214. -      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
  33215. -      # The file is in a subdirectory.
  33216. -      test ! -d "$ac_dir" && mkdir "$ac_dir"
  33217. -    fi
  33218. -    rm -f $ac_file
  33219. -    mv conftest.h $ac_file
  33220. -  fi
  33221. -fi; done
  33222. +  -h, --help       print this help, then exit
  33223. +  -V, --version    print version number, then exit
  33224. +  -q, --quiet      do not print progress messages
  33225. +  -d, --debug      don't remove temporary files
  33226. +      --recheck    update $as_me by reconfiguring in the same conditions
  33227. +  --file=FILE[:TEMPLATE]
  33228. +                   instantiate the configuration file FILE
  33229. +  --header=FILE[:TEMPLATE]
  33230. +                   instantiate the configuration header FILE
  33231.  
  33232. -EOF
  33233. +Configuration files:
  33234. +$config_files
  33235.  
  33236. -cat >> $CONFIG_STATUS <<EOF
  33237. -ac_sources="$nls_cv_header_libgt"
  33238. -ac_dests="$nls_cv_header_intl"
  33239. -EOF
  33240. +Configuration headers:
  33241. +$config_headers
  33242.  
  33243. -cat >> $CONFIG_STATUS <<\EOF
  33244. -srcdir=$ac_given_srcdir
  33245. -while test -n "$ac_sources"; do
  33246. -  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
  33247. -  set $ac_sources; ac_source=$1; shift; ac_sources=$*
  33248. +Configuration links:
  33249. +$config_links
  33250.  
  33251. -  echo "linking $srcdir/$ac_source to $ac_dest"
  33252. +Configuration commands:
  33253. +$config_commands
  33254.  
  33255. -  if test ! -r $srcdir/$ac_source; then
  33256. -    { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
  33257. -  fi
  33258. -  rm -f $ac_dest
  33259. +Report bugs to <bug-autoconf@gnu.org>."
  33260. +_ACEOF
  33261.  
  33262. -  # Make relative symlinks.
  33263. -  # Remove last slash and all that follows it.  Not all systems have dirname.
  33264. -  ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
  33265. -  if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
  33266. -    # The dest file is in a subdirectory.
  33267. -    test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
  33268. -    ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
  33269. -    # A "../" for each directory in $ac_dest_dir_suffix.
  33270. -    ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
  33271. -  else
  33272. -    ac_dest_dir_suffix= ac_dots=
  33273. -  fi
  33274. +cat >>$CONFIG_STATUS <<_ACEOF
  33275. +ac_cs_version="\\
  33276. +config.status
  33277. +configured by $0, generated by GNU Autoconf 2.57,
  33278. +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  33279.  
  33280. -  case "$srcdir" in
  33281. -  [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
  33282. -  *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
  33283. -  esac
  33284. +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
  33285. +Free Software Foundation, Inc.
  33286. +This config.status script is free software; the Free Software Foundation
  33287. +gives unlimited permission to copy, distribute and modify it."
  33288. +srcdir=$srcdir
  33289. +_ACEOF
  33290.  
  33291. -  # Make a symlink if possible; otherwise try a hard link.
  33292. -  if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
  33293. -    ln $srcdir/$ac_source $ac_dest; then :
  33294. -  else
  33295. -    { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
  33296. -  fi
  33297. +cat >>$CONFIG_STATUS <<\_ACEOF
  33298. +# If no file are specified by the user, then we need to provide default
  33299. +# value.  By we need to know if files were specified by the user.
  33300. +ac_need_defaults=:
  33301. +while test $# != 0
  33302. +do
  33303. +  case $1 in
  33304. +  --*=*)
  33305. +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
  33306. +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
  33307. +    ac_shift=:
  33308. +    ;;
  33309. +  -*)
  33310. +    ac_option=$1
  33311. +    ac_optarg=$2
  33312. +    ac_shift=shift
  33313. +    ;;
  33314. +  *) # This is not an option, so the user has probably given explicit
  33315. +     # arguments.
  33316. +     ac_option=$1
  33317. +     ac_need_defaults=false;;
  33318. +  esac
  33319. +
  33320. +  case $ac_option in
  33321. +  # Handling of the options.
  33322. +_ACEOF
  33323. +cat >>$CONFIG_STATUS <<\_ACEOF
  33324. +  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
  33325. +    ac_cs_recheck=: ;;
  33326. +  --version | --vers* | -V )
  33327. +    echo "$ac_cs_version"; exit 0 ;;
  33328. +  --he | --h)
  33329. +    # Conflict between --help and --header
  33330. +    { { echo "$as_me:$LINENO: error: ambiguous option: $1
  33331. +Try \`$0 --help' for more information." >&5
  33332. +echo "$as_me: error: ambiguous option: $1
  33333. +Try \`$0 --help' for more information." >&2;}
  33334. +   { (exit 1); exit 1; }; };;
  33335. +  --help | --hel | -h )
  33336. +    echo "$ac_cs_usage"; exit 0 ;;
  33337. +  --debug | --d* | -d )
  33338. +    debug=: ;;
  33339. +  --file | --fil | --fi | --f )
  33340. +    $ac_shift
  33341. +    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
  33342. +    ac_need_defaults=false;;
  33343. +  --header | --heade | --head | --hea )
  33344. +    $ac_shift
  33345. +    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
  33346. +    ac_need_defaults=false;;
  33347. +  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  33348. +  | -silent | --silent | --silen | --sile | --sil | --si | --s)
  33349. +    ac_cs_silent=: ;;
  33350. +
  33351. +  # This is an error.
  33352. +  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
  33353. +Try \`$0 --help' for more information." >&5
  33354. +echo "$as_me: error: unrecognized option: $1
  33355. +Try \`$0 --help' for more information." >&2;}
  33356. +   { (exit 1); exit 1; }; } ;;
  33357. +
  33358. +  *) ac_config_targets="$ac_config_targets $1" ;;
  33359. +
  33360. +  esac
  33361. +  shift
  33362.  done
  33363. -EOF
  33364. -cat >> $CONFIG_STATUS <<EOF
  33365. +
  33366. +ac_configure_extra_args=
  33367. +
  33368. +if $ac_cs_silent; then
  33369. +  exec 6>/dev/null
  33370. +  ac_configure_extra_args="$ac_configure_extra_args --silent"
  33371. +fi
  33372. +
  33373. +_ACEOF
  33374. +cat >>$CONFIG_STATUS <<_ACEOF
  33375. +if \$ac_cs_recheck; then
  33376. +  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
  33377. +  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
  33378. +fi
  33379. +
  33380. +_ACEOF
  33381. +
  33382. +cat >>$CONFIG_STATUS <<_ACEOF
  33383. +#
  33384. +# INIT-COMMANDS section.
  33385. +#
  33386. +
  33387.  
  33388.  
  33389.  host='${host}'
  33390. @@ -9170,12 +12964,834 @@
  33391.  build_overrides='${build_overrides}'
  33392.  cpp_install_dir='${cpp_install_dir}'
  33393.  
  33394. -EOF
  33395. -cat >> $CONFIG_STATUS <<\EOF
  33396. -case "$CONFIG_FILES" in *po/Makefile.in*)
  33397. -        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
  33398. +
  33399. +_ACEOF
  33400. +
  33401. +
  33402. +
  33403. +cat >>$CONFIG_STATUS <<\_ACEOF
  33404. +for ac_config_target in $ac_config_targets
  33405. +do
  33406. +  case "$ac_config_target" in
  33407. +  # Handling of arguments.
  33408. +  "$all_outputs" ) CONFIG_FILES="$CONFIG_FILES $all_outputs" ;;
  33409. +  "$ac_config_links_1" ) CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
  33410. +  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
  33411. +  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
  33412. +  "auto-host.h" ) CONFIG_HEADERS="$CONFIG_HEADERS auto-host.h:config.in" ;;
  33413. +  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
  33414. +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
  33415. +   { (exit 1); exit 1; }; };;
  33416.        esac
  33417. +done
  33418. +
  33419. +# If the user did not use the arguments to specify the items to instantiate,
  33420. +# then the envvar interface is used.  Set only those that are not.
  33421. +# We use the long form for the default assignment because of an extremely
  33422. +# bizarre bug on SunOS 4.1.3.
  33423. +if $ac_need_defaults; then
  33424. +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  33425. +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  33426. +  test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
  33427. +  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
  33428. +fi
  33429. +
  33430. +# Have a temporary directory for convenience.  Make it in the build tree
  33431. +# simply because there is no reason to put it here, and in addition,
  33432. +# creating and moving files from /tmp can sometimes cause problems.
  33433. +# Create a temporary directory, and hook for its removal unless debugging.
  33434. +$debug ||
  33435. +{
  33436. +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
  33437. +  trap '{ (exit 1); exit 1; }' 1 2 13 15
  33438. +}
  33439. +
  33440. +# Create a (secure) tmp directory for tmp files.
  33441. +
  33442. +{
  33443. +  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
  33444. +  test -n "$tmp" && test -d "$tmp"
  33445. +}  ||
  33446. +{
  33447. +  tmp=./confstat$$-$RANDOM
  33448. +  (umask 077 && mkdir $tmp)
  33449. +} ||
  33450. +{
  33451. +   echo "$me: cannot create a temporary directory in ." >&2
  33452. +   { (exit 1); exit 1; }
  33453. +}
  33454. +
  33455. +_ACEOF
  33456. +
  33457. +cat >>$CONFIG_STATUS <<_ACEOF
  33458. +
  33459. +#
  33460. +# CONFIG_FILES section.
  33461. +#
  33462. +
  33463. +# No need to generate the scripts if there are no CONFIG_FILES.
  33464. +# This happens for instance when ./config.status config.h
  33465. +if test -n "\$CONFIG_FILES"; then
  33466. +  # Protect against being on the right side of a sed subst in config.status.
  33467. +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
  33468. +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
  33469. +s,@SHELL@,$SHELL,;t t
  33470. +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
  33471. +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
  33472. +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
  33473. +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
  33474. +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
  33475. +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
  33476. +s,@exec_prefix@,$exec_prefix,;t t
  33477. +s,@prefix@,$prefix,;t t
  33478. +s,@program_transform_name@,$program_transform_name,;t t
  33479. +s,@bindir@,$bindir,;t t
  33480. +s,@sbindir@,$sbindir,;t t
  33481. +s,@libexecdir@,$libexecdir,;t t
  33482. +s,@datadir@,$datadir,;t t
  33483. +s,@sysconfdir@,$sysconfdir,;t t
  33484. +s,@sharedstatedir@,$sharedstatedir,;t t
  33485. +s,@localstatedir@,$localstatedir,;t t
  33486. +s,@libdir@,$libdir,;t t
  33487. +s,@includedir@,$includedir,;t t
  33488. +s,@oldincludedir@,$oldincludedir,;t t
  33489. +s,@infodir@,$infodir,;t t
  33490. +s,@mandir@,$mandir,;t t
  33491. +s,@build_alias@,$build_alias,;t t
  33492. +s,@host_alias@,$host_alias,;t t
  33493. +s,@target_alias@,$target_alias,;t t
  33494. +s,@DEFS@,$DEFS,;t t
  33495. +s,@ECHO_C@,$ECHO_C,;t t
  33496. +s,@ECHO_N@,$ECHO_N,;t t
  33497. +s,@ECHO_T@,$ECHO_T,;t t
  33498. +s,@LIBS@,$LIBS,;t t
  33499. +s,@build@,$build,;t t
  33500. +s,@build_cpu@,$build_cpu,;t t
  33501. +s,@build_vendor@,$build_vendor,;t t
  33502. +s,@build_os@,$build_os,;t t
  33503. +s,@host@,$host,;t t
  33504. +s,@host_cpu@,$host_cpu,;t t
  33505. +s,@host_vendor@,$host_vendor,;t t
  33506. +s,@host_os@,$host_os,;t t
  33507. +s,@target@,$target,;t t
  33508. +s,@target_cpu@,$target_cpu,;t t
  33509. +s,@target_vendor@,$target_vendor,;t t
  33510. +s,@target_os@,$target_os,;t t
  33511. +s,@CC@,$CC,;t t
  33512. +s,@CFLAGS@,$CFLAGS,;t t
  33513. +s,@LDFLAGS@,$LDFLAGS,;t t
  33514. +s,@CPPFLAGS@,$CPPFLAGS,;t t
  33515. +s,@ac_ct_CC@,$ac_ct_CC,;t t
  33516. +s,@EXEEXT@,$EXEEXT,;t t
  33517. +s,@OBJEXT@,$OBJEXT,;t t
  33518. +s,@stage1_warn_cflags@,$stage1_warn_cflags,;t t
  33519. +s,@SET_MAKE@,$SET_MAKE,;t t
  33520. +s,@AWK@,$AWK,;t t
  33521. +s,@LEX@,$LEX,;t t
  33522. +s,@LEXLIB@,$LEXLIB,;t t
  33523. +s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
  33524. +s,@LN@,$LN,;t t
  33525. +s,@LN_S@,$LN_S,;t t
  33526. +s,@RANLIB@,$RANLIB,;t t
  33527. +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
  33528. +s,@YACC@,$YACC,;t t
  33529. +s,@INSTALL@,$INSTALL,;t t
  33530. +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
  33531. +s,@INSTALL_DATA@,$INSTALL_DATA,;t t
  33532. +s,@CPP@,$CPP,;t t
  33533. +s,@EGREP@,$EGREP,;t t
  33534. +s,@gnat@,$gnat,;t t
  33535. +s,@vfprintf@,$vfprintf,;t t
  33536. +s,@doprint@,$doprint,;t t
  33537. +s,@manext@,$manext,;t t
  33538. +s,@objext@,$objext,;t t
  33539. +s,@PACKAGE@,$PACKAGE,;t t
  33540. +s,@VERSION@,$VERSION,;t t
  33541. +s,@ALLOCA@,$ALLOCA,;t t
  33542. +s,@USE_NLS@,$USE_NLS,;t t
  33543. +s,@MSGFMT@,$MSGFMT,;t t
  33544. +s,@GMSGFMT@,$GMSGFMT,;t t
  33545. +s,@XGETTEXT@,$XGETTEXT,;t t
  33546. +s,@GENCAT@,$GENCAT,;t t
  33547. +s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
  33548. +s,@CATALOGS@,$CATALOGS,;t t
  33549. +s,@CATOBJEXT@,$CATOBJEXT,;t t
  33550. +s,@DATADIRNAME@,$DATADIRNAME,;t t
  33551. +s,@GMOFILES@,$GMOFILES,;t t
  33552. +s,@INSTOBJEXT@,$INSTOBJEXT,;t t
  33553. +s,@INTLDEPS@,$INTLDEPS,;t t
  33554. +s,@INTLLIBS@,$INTLLIBS,;t t
  33555. +s,@INTLOBJS@,$INTLOBJS,;t t
  33556. +s,@POFILES@,$POFILES,;t t
  33557. +s,@POSUB@,$POSUB,;t t
  33558. +s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t
  33559. +s,@GT_NO@,$GT_NO,;t t
  33560. +s,@GT_YES@,$GT_YES,;t t
  33561. +s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
  33562. +s,@l@,$l,;t t
  33563. +s,@gthread_flags@,$gthread_flags,;t t
  33564. +s,@build_canonical@,$build_canonical,;t t
  33565. +s,@host_canonical@,$host_canonical,;t t
  33566. +s,@target_subdir@,$target_subdir,;t t
  33567. +s,@inhibit_libc@,$inhibit_libc,;t t
  33568. +s,@sched_prefix@,$sched_prefix,;t t
  33569. +s,@sched_cflags@,$sched_cflags,;t t
  33570. +s,@gcc_tooldir@,$gcc_tooldir,;t t
  33571. +s,@dollar@,$dollar,;t t
  33572. +s,@objdir@,$objdir,;t t
  33573. +s,@subdirs@,$subdirs,;t t
  33574. +s,@all_boot_languages@,$all_boot_languages,;t t
  33575. +s,@all_compilers@,$all_compilers,;t t
  33576. +s,@all_diff_excludes@,$all_diff_excludes,;t t
  33577. +s,@all_headers@,$all_headers,;t t
  33578. +s,@all_lang_makefiles@,$all_lang_makefiles,;t t
  33579. +s,@all_languages@,$all_languages,;t t
  33580. +s,@all_lib2funcs@,$all_lib2funcs,;t t
  33581. +s,@all_stagestuff@,$all_stagestuff,;t t
  33582. +s,@build_exeext@,$build_exeext,;t t
  33583. +s,@build_install_headers_dir@,$build_install_headers_dir,;t t
  33584. +s,@build_xm_file_list@,$build_xm_file_list,;t t
  33585. +s,@cc_set_by_configure@,$cc_set_by_configure,;t t
  33586. +s,@quoted_cc_set_by_configure@,$quoted_cc_set_by_configure,;t t
  33587. +s,@cpp_install_dir@,$cpp_install_dir,;t t
  33588. +s,@cpp_main@,$cpp_main,;t t
  33589. +s,@dep_host_xmake_file@,$dep_host_xmake_file,;t t
  33590. +s,@dep_tmake_file@,$dep_tmake_file,;t t
  33591. +s,@extra_c_flags@,$extra_c_flags,;t t
  33592. +s,@extra_c_objs@,$extra_c_objs,;t t
  33593. +s,@extra_cpp_objs@,$extra_cpp_objs,;t t
  33594. +s,@extra_cxx_objs@,$extra_cxx_objs,;t t
  33595. +s,@extra_headers_list@,$extra_headers_list,;t t
  33596. +s,@extra_objs@,$extra_objs,;t t
  33597. +s,@extra_parts@,$extra_parts,;t t
  33598. +s,@extra_passes@,$extra_passes,;t t
  33599. +s,@extra_programs@,$extra_programs,;t t
  33600. +s,@fixinc_defs@,$fixinc_defs,;t t
  33601. +s,@float_h_file@,$float_h_file,;t t
  33602. +s,@gcc_gxx_include_dir@,$gcc_gxx_include_dir,;t t
  33603. +s,@gcc_version@,$gcc_version,;t t
  33604. +s,@gcc_version_trigger@,$gcc_version_trigger,;t t
  33605. +s,@host_exeext@,$host_exeext,;t t
  33606. +s,@host_extra_gcc_objs@,$host_extra_gcc_objs,;t t
  33607. +s,@host_xm_file_list@,$host_xm_file_list,;t t
  33608. +s,@install@,$install,;t t
  33609. +s,@JAVAGC@,$JAVAGC,;t t
  33610. +s,@lang_options_files@,$lang_options_files,;t t
  33611. +s,@lang_specs_files@,$lang_specs_files,;t t
  33612. +s,@lang_tree_files@,$lang_tree_files,;t t
  33613. +s,@local_prefix@,$local_prefix,;t t
  33614. +s,@maybe_use_collect2@,$maybe_use_collect2,;t t
  33615. +s,@md_file@,$md_file,;t t
  33616. +s,@objc_boehm_gc@,$objc_boehm_gc,;t t
  33617. +s,@out_file@,$out_file,;t t
  33618. +s,@out_object_file@,$out_object_file,;t t
  33619. +s,@stage_prefix_set_by_configure@,$stage_prefix_set_by_configure,;t t
  33620. +s,@symbolic_link@,$symbolic_link,;t t
  33621. +s,@thread_file@,$thread_file,;t t
  33622. +s,@tm_file_list@,$tm_file_list,;t t
  33623. +s,@will_use_collect2@,$will_use_collect2,;t t
  33624. +s,@cross_defines@,$cross_defines,;t t
  33625. +s,@LIBOBJS@,$LIBOBJS,;t t
  33626. +s,@LTLIBOBJS@,$LTLIBOBJS,;t t
  33627. +/@target_overrides@/r $target_overrides
  33628. +s,@target_overrides@,,;t t
  33629. +/@host_overrides@/r $host_overrides
  33630. +s,@host_overrides@,,;t t
  33631. +/@cross_overrides@/r $cross_overrides
  33632. +s,@cross_overrides@,,;t t
  33633. +/@build_overrides@/r $build_overrides
  33634. +s,@build_overrides@,,;t t
  33635. +/@language_fragments@/r $language_fragments
  33636. +s,@language_fragments@,,;t t
  33637. +/@language_hooks@/r $language_hooks
  33638. +s,@language_hooks@,,;t t
  33639. +CEOF
  33640. +
  33641. +_ACEOF
  33642. +
  33643. +  cat >>$CONFIG_STATUS <<\_ACEOF
  33644. +  # Split the substitutions into bite-sized pieces for seds with
  33645. +  # small command number limits, like on Digital OSF/1 and HP-UX.
  33646. +  ac_max_sed_lines=48
  33647. +  ac_sed_frag=1 # Number of current file.
  33648. +  ac_beg=1 # First line for current file.
  33649. +  ac_end=$ac_max_sed_lines # Line after last line for current file.
  33650. +  ac_more_lines=:
  33651. +  ac_sed_cmds=
  33652. +  while $ac_more_lines; do
  33653. +    if test $ac_beg -gt 1; then
  33654. +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  33655. +    else
  33656. +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
  33657. +    fi
  33658. +    if test ! -s $tmp/subs.frag; then
  33659. +      ac_more_lines=false
  33660. +    else
  33661. +      # The purpose of the label and of the branching condition is to
  33662. +      # speed up the sed processing (if there are no `@' at all, there
  33663. +      # is no need to browse any of the substitutions).
  33664. +      # These are the two extra sed commands mentioned above.
  33665. +      (echo ':t
  33666. +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
  33667. +      if test -z "$ac_sed_cmds"; then
  33668. +      ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
  33669. +      else
  33670. +      ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
  33671. +      fi
  33672. +      ac_sed_frag=`expr $ac_sed_frag + 1`
  33673. +      ac_beg=$ac_end
  33674. +      ac_end=`expr $ac_end + $ac_max_sed_lines`
  33675. +    fi
  33676. +  done
  33677. +  if test -z "$ac_sed_cmds"; then
  33678. +    ac_sed_cmds=cat
  33679. +  fi
  33680. +fi # test -n "$CONFIG_FILES"
  33681. +
  33682. +_ACEOF
  33683. +cat >>$CONFIG_STATUS <<\_ACEOF
  33684. +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
  33685. +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  33686. +  case $ac_file in
  33687. +  - | *:- | *:-:* ) # input from stdin
  33688. +        cat >$tmp/stdin
  33689. +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  33690. +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  33691. +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  33692. +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  33693. +  * )   ac_file_in=$ac_file.in ;;
  33694. +  esac
  33695. +
  33696. +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
  33697. +  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  33698. +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  33699. +         X"$ac_file" : 'X\(//\)[^/]' \| \
  33700. +         X"$ac_file" : 'X\(//\)$' \| \
  33701. +         X"$ac_file" : 'X\(/\)' \| \
  33702. +         .     : '\(.\)' 2>/dev/null ||
  33703. +echo X"$ac_file" |
  33704. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  33705. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  33706. +        /^X\(\/\/\)$/{ s//\1/; q; }
  33707. +        /^X\(\/\).*/{ s//\1/; q; }
  33708. +        s/.*/./; q'`
  33709. +  { if $as_mkdir_p; then
  33710. +    mkdir -p "$ac_dir"
  33711. +  else
  33712. +    as_dir="$ac_dir"
  33713. +    as_dirs=
  33714. +    while test ! -d "$as_dir"; do
  33715. +      as_dirs="$as_dir $as_dirs"
  33716. +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  33717. +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  33718. +         X"$as_dir" : 'X\(//\)[^/]' \| \
  33719. +         X"$as_dir" : 'X\(//\)$' \| \
  33720. +         X"$as_dir" : 'X\(/\)' \| \
  33721. +         .     : '\(.\)' 2>/dev/null ||
  33722. +echo X"$as_dir" |
  33723. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  33724. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  33725. +        /^X\(\/\/\)$/{ s//\1/; q; }
  33726. +        /^X\(\/\).*/{ s//\1/; q; }
  33727. +        s/.*/./; q'`
  33728. +    done
  33729. +    test ! -n "$as_dirs" || mkdir $as_dirs
  33730. +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
  33731. +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
  33732. +   { (exit 1); exit 1; }; }; }
  33733. +
  33734. +  ac_builddir=.
  33735. +
  33736. +if test "$ac_dir" != .; then
  33737. +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  33738. +  # A "../" for each directory in $ac_dir_suffix.
  33739. +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  33740. +else
  33741. +  ac_dir_suffix= ac_top_builddir=
  33742. +fi
  33743. +
  33744. +case $srcdir in
  33745. +  .)  # No --srcdir option.  We are building in place.
  33746. +    ac_srcdir=.
  33747. +    if test -z "$ac_top_builddir"; then
  33748. +       ac_top_srcdir=.
  33749. +    else
  33750. +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  33751. +    fi ;;
  33752. +  [\\/]* | ?:[\\/]* )  # Absolute path.
  33753. +    ac_srcdir=$srcdir$ac_dir_suffix;
  33754. +    ac_top_srcdir=$srcdir ;;
  33755. +  *) # Relative path.
  33756. +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  33757. +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  33758. +esac
  33759. +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
  33760. +# absolute.
  33761. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
  33762. +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
  33763. +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
  33764. +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  33765. +
  33766.  
  33767. +
  33768. +  if test x"$ac_file" != x-; then
  33769. +    { echo "$as_me:$LINENO: creating $ac_file" >&5
  33770. +echo "$as_me: creating $ac_file" >&6;}
  33771. +    rm -f "$ac_file"
  33772. +  fi
  33773. +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  33774. +  # use $as_me), people would be surprised to read:
  33775. +  #    /* config.h.  Generated by config.status.  */
  33776. +  if test x"$ac_file" = x-; then
  33777. +    configure_input=
  33778. +  else
  33779. +    configure_input="$ac_file.  "
  33780. +  fi
  33781. +  configure_input=$configure_input"Generated from `echo $ac_file_in |
  33782. +                                     sed 's,.*/,,'` by configure."
  33783. +
  33784. +  # First look for the input files in the build tree, otherwise in the
  33785. +  # src tree.
  33786. +  ac_file_inputs=`IFS=:
  33787. +    for f in $ac_file_in; do
  33788. +      case $f in
  33789. +      -) echo $tmp/stdin ;;
  33790. +      [\\/$]*)
  33791. +         # Absolute (can't be DOS-style, as IFS=:)
  33792. +         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  33793. +echo "$as_me: error: cannot find input file: $f" >&2;}
  33794. +   { (exit 1); exit 1; }; }
  33795. +         echo $f;;
  33796. +      *) # Relative
  33797. +         if test -f "$f"; then
  33798. +           # Build tree
  33799. +           echo $f
  33800. +         elif test -f "$srcdir/$f"; then
  33801. +           # Source tree
  33802. +           echo $srcdir/$f
  33803. +         else
  33804. +           # /dev/null tree
  33805. +           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  33806. +echo "$as_me: error: cannot find input file: $f" >&2;}
  33807. +   { (exit 1); exit 1; }; }
  33808. +         fi;;
  33809. +      esac
  33810. +    done` || { (exit 1); exit 1; }
  33811. +_ACEOF
  33812. +cat >>$CONFIG_STATUS <<_ACEOF
  33813. +  sed "$ac_vpsub
  33814. +$extrasub
  33815. +_ACEOF
  33816. +cat >>$CONFIG_STATUS <<\_ACEOF
  33817. +:t
  33818. +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
  33819. +s,@configure_input@,$configure_input,;t t
  33820. +s,@srcdir@,$ac_srcdir,;t t
  33821. +s,@abs_srcdir@,$ac_abs_srcdir,;t t
  33822. +s,@top_srcdir@,$ac_top_srcdir,;t t
  33823. +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
  33824. +s,@builddir@,$ac_builddir,;t t
  33825. +s,@abs_builddir@,$ac_abs_builddir,;t t
  33826. +s,@top_builddir@,$ac_top_builddir,;t t
  33827. +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
  33828. +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
  33829. +  rm -f $tmp/stdin
  33830. +  if test x"$ac_file" != x-; then
  33831. +    mv $tmp/out $ac_file
  33832. +  else
  33833. +    cat $tmp/out
  33834. +    rm -f $tmp/out
  33835. +  fi
  33836. +
  33837. +done
  33838. +_ACEOF
  33839. +cat >>$CONFIG_STATUS <<\_ACEOF
  33840. +
  33841. +#
  33842. +# CONFIG_HEADER section.
  33843. +#
  33844. +
  33845. +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
  33846. +# NAME is the cpp macro being defined and VALUE is the value it is being given.
  33847. +#
  33848. +# ac_d sets the value in "#define NAME VALUE" lines.
  33849. +ac_dA='s,^\([     ]*\)#\([     ]*define[     ][     ]*\)'
  33850. +ac_dB='[     ].*$,\1#\2'
  33851. +ac_dC=' '
  33852. +ac_dD=',;t'
  33853. +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
  33854. +ac_uA='s,^\([     ]*\)#\([     ]*\)undef\([     ][     ]*\)'
  33855. +ac_uB='$,\1#\2define\3'
  33856. +ac_uC=' '
  33857. +ac_uD=',;t'
  33858. +
  33859. +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
  33860. +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  33861. +  case $ac_file in
  33862. +  - | *:- | *:-:* ) # input from stdin
  33863. +        cat >$tmp/stdin
  33864. +        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  33865. +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  33866. +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
  33867. +        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
  33868. +  * )   ac_file_in=$ac_file.in ;;
  33869. +  esac
  33870. +
  33871. +  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
  33872. +echo "$as_me: creating $ac_file" >&6;}
  33873. +
  33874. +  # First look for the input files in the build tree, otherwise in the
  33875. +  # src tree.
  33876. +  ac_file_inputs=`IFS=:
  33877. +    for f in $ac_file_in; do
  33878. +      case $f in
  33879. +      -) echo $tmp/stdin ;;
  33880. +      [\\/$]*)
  33881. +         # Absolute (can't be DOS-style, as IFS=:)
  33882. +         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  33883. +echo "$as_me: error: cannot find input file: $f" >&2;}
  33884. +   { (exit 1); exit 1; }; }
  33885. +         echo $f;;
  33886. +      *) # Relative
  33887. +         if test -f "$f"; then
  33888. +           # Build tree
  33889. +           echo $f
  33890. +         elif test -f "$srcdir/$f"; then
  33891. +           # Source tree
  33892. +           echo $srcdir/$f
  33893. +         else
  33894. +           # /dev/null tree
  33895. +           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
  33896. +echo "$as_me: error: cannot find input file: $f" >&2;}
  33897. +   { (exit 1); exit 1; }; }
  33898. +         fi;;
  33899. +      esac
  33900. +    done` || { (exit 1); exit 1; }
  33901. +  # Remove the trailing spaces.
  33902. +  sed 's/[     ]*$//' $ac_file_inputs >$tmp/in
  33903. +
  33904. +_ACEOF
  33905. +
  33906. +# Transform confdefs.h into two sed scripts, `conftest.defines' and
  33907. +# `conftest.undefs', that substitutes the proper values into
  33908. +# config.h.in to produce config.h.  The first handles `#define'
  33909. +# templates, and the second `#undef' templates.
  33910. +# And first: Protect against being on the right side of a sed subst in
  33911. +# config.status.  Protect against being in an unquoted here document
  33912. +# in config.status.
  33913. +rm -f conftest.defines conftest.undefs
  33914. +# Using a here document instead of a string reduces the quoting nightmare.
  33915. +# Putting comments in sed scripts is not portable.
  33916. +#
  33917. +# `end' is used to avoid that the second main sed command (meant for
  33918. +# 0-ary CPP macros) applies to n-ary macro definitions.
  33919. +# See the Autoconf documentation for `clear'.
  33920. +cat >confdef2sed.sed <<\_ACEOF
  33921. +s/[\\&,]/\\&/g
  33922. +s,[\\$`],\\&,g
  33923. +t clear
  33924. +: clear
  33925. +s,^[     ]*#[     ]*define[     ][     ]*\([^     (][^     (]*\)\(([^)]*)\)[     ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
  33926. +t end
  33927. +s,^[     ]*#[     ]*define[     ][     ]*\([^     ][^     ]*\)[     ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
  33928. +: end
  33929. +_ACEOF
  33930. +# If some macros were called several times there might be several times
  33931. +# the same #defines, which is useless.  Nevertheless, we may not want to
  33932. +# sort them, since we want the *last* AC-DEFINE to be honored.
  33933. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
  33934. +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
  33935. +rm -f confdef2sed.sed
  33936. +
  33937. +# This sed command replaces #undef with comments.  This is necessary, for
  33938. +# example, in the case of _POSIX_SOURCE, which is predefined and required
  33939. +# on some systems where configure will not decide to define it.
  33940. +cat >>conftest.undefs <<\_ACEOF
  33941. +s,^[     ]*#[     ]*undef[     ][     ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
  33942. +_ACEOF
  33943. +
  33944. +# Break up conftest.defines because some shells have a limit on the size
  33945. +# of here documents, and old seds have small limits too (100 cmds).
  33946. +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
  33947. +echo '  if grep "^[     ]*#[     ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
  33948. +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
  33949. +echo '  :' >>$CONFIG_STATUS
  33950. +rm -f conftest.tail
  33951. +while grep . conftest.defines >/dev/null
  33952. +do
  33953. +  # Write a limited-size here document to $tmp/defines.sed.
  33954. +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
  33955. +  # Speed up: don't consider the non `#define' lines.
  33956. +  echo '/^[     ]*#[     ]*define/!b' >>$CONFIG_STATUS
  33957. +  # Work around the forget-to-reset-the-flag bug.
  33958. +  echo 't clr' >>$CONFIG_STATUS
  33959. +  echo ': clr' >>$CONFIG_STATUS
  33960. +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
  33961. +  echo 'CEOF
  33962. +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
  33963. +  rm -f $tmp/in
  33964. +  mv $tmp/out $tmp/in
  33965. +' >>$CONFIG_STATUS
  33966. +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
  33967. +  rm -f conftest.defines
  33968. +  mv conftest.tail conftest.defines
  33969. +done
  33970. +rm -f conftest.defines
  33971. +echo '  fi # grep' >>$CONFIG_STATUS
  33972. +echo >>$CONFIG_STATUS
  33973. +
  33974. +# Break up conftest.undefs because some shells have a limit on the size
  33975. +# of here documents, and old seds have small limits too (100 cmds).
  33976. +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
  33977. +rm -f conftest.tail
  33978. +while grep . conftest.undefs >/dev/null
  33979. +do
  33980. +  # Write a limited-size here document to $tmp/undefs.sed.
  33981. +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
  33982. +  # Speed up: don't consider the non `#undef'
  33983. +  echo '/^[     ]*#[     ]*undef/!b' >>$CONFIG_STATUS
  33984. +  # Work around the forget-to-reset-the-flag bug.
  33985. +  echo 't clr' >>$CONFIG_STATUS
  33986. +  echo ': clr' >>$CONFIG_STATUS
  33987. +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
  33988. +  echo 'CEOF
  33989. +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
  33990. +  rm -f $tmp/in
  33991. +  mv $tmp/out $tmp/in
  33992. +' >>$CONFIG_STATUS
  33993. +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
  33994. +  rm -f conftest.undefs
  33995. +  mv conftest.tail conftest.undefs
  33996. +done
  33997. +rm -f conftest.undefs
  33998. +
  33999. +cat >>$CONFIG_STATUS <<\_ACEOF
  34000. +  # Let's still pretend it is `configure' which instantiates (i.e., don't
  34001. +  # use $as_me), people would be surprised to read:
  34002. +  #    /* config.h.  Generated by config.status.  */
  34003. +  if test x"$ac_file" = x-; then
  34004. +    echo "/* Generated by configure.  */" >$tmp/config.h
  34005. +  else
  34006. +    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
  34007. +  fi
  34008. +  cat $tmp/in >>$tmp/config.h
  34009. +  rm -f $tmp/in
  34010. +  if test x"$ac_file" != x-; then
  34011. +    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
  34012. +      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
  34013. +echo "$as_me: $ac_file is unchanged" >&6;}
  34014. +    else
  34015. +      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
  34016. +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  34017. +         X"$ac_file" : 'X\(//\)[^/]' \| \
  34018. +         X"$ac_file" : 'X\(//\)$' \| \
  34019. +         X"$ac_file" : 'X\(/\)' \| \
  34020. +         .     : '\(.\)' 2>/dev/null ||
  34021. +echo X"$ac_file" |
  34022. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  34023. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  34024. +        /^X\(\/\/\)$/{ s//\1/; q; }
  34025. +        /^X\(\/\).*/{ s//\1/; q; }
  34026. +        s/.*/./; q'`
  34027. +      { if $as_mkdir_p; then
  34028. +    mkdir -p "$ac_dir"
  34029. +  else
  34030. +    as_dir="$ac_dir"
  34031. +    as_dirs=
  34032. +    while test ! -d "$as_dir"; do
  34033. +      as_dirs="$as_dir $as_dirs"
  34034. +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  34035. +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  34036. +         X"$as_dir" : 'X\(//\)[^/]' \| \
  34037. +         X"$as_dir" : 'X\(//\)$' \| \
  34038. +         X"$as_dir" : 'X\(/\)' \| \
  34039. +         .     : '\(.\)' 2>/dev/null ||
  34040. +echo X"$as_dir" |
  34041. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  34042. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  34043. +        /^X\(\/\/\)$/{ s//\1/; q; }
  34044. +        /^X\(\/\).*/{ s//\1/; q; }
  34045. +        s/.*/./; q'`
  34046. +    done
  34047. +    test ! -n "$as_dirs" || mkdir $as_dirs
  34048. +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
  34049. +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
  34050. +   { (exit 1); exit 1; }; }; }
  34051. +
  34052. +      rm -f $ac_file
  34053. +      mv $tmp/config.h $ac_file
  34054. +    fi
  34055. +  else
  34056. +    cat $tmp/config.h
  34057. +    rm -f $tmp/config.h
  34058. +  fi
  34059. +done
  34060. +_ACEOF
  34061. +cat >>$CONFIG_STATUS <<\_ACEOF
  34062. +
  34063. +#
  34064. +# CONFIG_LINKS section.
  34065. +#
  34066. +
  34067. +for ac_file in : $CONFIG_LINKS; do test "x$ac_file" = x: && continue
  34068. +  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
  34069. +  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
  34070. +
  34071. +  { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_dest" >&5
  34072. +echo "$as_me: linking $srcdir/$ac_source to $ac_dest" >&6;}
  34073. +
  34074. +  if test ! -r $srcdir/$ac_source; then
  34075. +    { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5
  34076. +echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;}
  34077. +   { (exit 1); exit 1; }; }
  34078. +  fi
  34079. +  rm -f $ac_dest
  34080. +
  34081. +  # Make relative symlinks.
  34082. +  ac_dest_dir=`(dirname "$ac_dest") 2>/dev/null ||
  34083. +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  34084. +         X"$ac_dest" : 'X\(//\)[^/]' \| \
  34085. +         X"$ac_dest" : 'X\(//\)$' \| \
  34086. +         X"$ac_dest" : 'X\(/\)' \| \
  34087. +         .     : '\(.\)' 2>/dev/null ||
  34088. +echo X"$ac_dest" |
  34089. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  34090. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  34091. +        /^X\(\/\/\)$/{ s//\1/; q; }
  34092. +        /^X\(\/\).*/{ s//\1/; q; }
  34093. +        s/.*/./; q'`
  34094. +  { if $as_mkdir_p; then
  34095. +    mkdir -p "$ac_dest_dir"
  34096. +  else
  34097. +    as_dir="$ac_dest_dir"
  34098. +    as_dirs=
  34099. +    while test ! -d "$as_dir"; do
  34100. +      as_dirs="$as_dir $as_dirs"
  34101. +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
  34102. +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  34103. +         X"$as_dir" : 'X\(//\)[^/]' \| \
  34104. +         X"$as_dir" : 'X\(//\)$' \| \
  34105. +         X"$as_dir" : 'X\(/\)' \| \
  34106. +         .     : '\(.\)' 2>/dev/null ||
  34107. +echo X"$as_dir" |
  34108. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  34109. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  34110. +        /^X\(\/\/\)$/{ s//\1/; q; }
  34111. +        /^X\(\/\).*/{ s//\1/; q; }
  34112. +        s/.*/./; q'`
  34113. +    done
  34114. +    test ! -n "$as_dirs" || mkdir $as_dirs
  34115. +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dest_dir\"" >&5
  34116. +echo "$as_me: error: cannot create directory \"$ac_dest_dir\"" >&2;}
  34117. +   { (exit 1); exit 1; }; }; }
  34118. +
  34119. +  ac_builddir=.
  34120. +
  34121. +if test "$ac_dest_dir" != .; then
  34122. +  ac_dir_suffix=/`echo "$ac_dest_dir" | sed 's,^\.[\\/],,'`
  34123. +  # A "../" for each directory in $ac_dir_suffix.
  34124. +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  34125. +else
  34126. +  ac_dir_suffix= ac_top_builddir=
  34127. +fi
  34128. +
  34129. +case $srcdir in
  34130. +  .)  # No --srcdir option.  We are building in place.
  34131. +    ac_srcdir=.
  34132. +    if test -z "$ac_top_builddir"; then
  34133. +       ac_top_srcdir=.
  34134. +    else
  34135. +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  34136. +    fi ;;
  34137. +  [\\/]* | ?:[\\/]* )  # Absolute path.
  34138. +    ac_srcdir=$srcdir$ac_dir_suffix;
  34139. +    ac_top_srcdir=$srcdir ;;
  34140. +  *) # Relative path.
  34141. +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  34142. +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  34143. +esac
  34144. +# Don't blindly perform a `cd "$ac_dest_dir"/$ac_foo && pwd` since $ac_foo can be
  34145. +# absolute.
  34146. +ac_abs_builddir=`cd "$ac_dest_dir" && cd $ac_builddir && pwd`
  34147. +ac_abs_top_builddir=`cd "$ac_dest_dir" && cd ${ac_top_builddir}. && pwd`
  34148. +ac_abs_srcdir=`cd "$ac_dest_dir" && cd $ac_srcdir && pwd`
  34149. +ac_abs_top_srcdir=`cd "$ac_dest_dir" && cd $ac_top_srcdir && pwd`
  34150. +
  34151. +
  34152. +  case $srcdir in
  34153. +  [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;;
  34154. +      *) ac_rel_source=$ac_top_builddir$srcdir/$ac_source ;;
  34155. +  esac
  34156. +
  34157. +  # Try a symlink, then a hard link, then a copy.
  34158. +  ln -s $ac_rel_source $ac_dest 2>/dev/null ||
  34159. +    ln $srcdir/$ac_source $ac_dest 2>/dev/null ||
  34160. +    cp -p $srcdir/$ac_source $ac_dest ||
  34161. +    { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&5
  34162. +echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_dest" >&2;}
  34163. +   { (exit 1); exit 1; }; }
  34164. +done
  34165. +_ACEOF
  34166. +cat >>$CONFIG_STATUS <<\_ACEOF
  34167. +
  34168. +#
  34169. +# CONFIG_COMMANDS section.
  34170. +#
  34171. +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
  34172. +  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
  34173. +  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
  34174. +  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
  34175. +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  34176. +         X"$ac_dest" : 'X\(//\)[^/]' \| \
  34177. +         X"$ac_dest" : 'X\(//\)$' \| \
  34178. +         X"$ac_dest" : 'X\(/\)' \| \
  34179. +         .     : '\(.\)' 2>/dev/null ||
  34180. +echo X"$ac_dest" |
  34181. +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  34182. +        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  34183. +        /^X\(\/\/\)$/{ s//\1/; q; }
  34184. +        /^X\(\/\).*/{ s//\1/; q; }
  34185. +        s/.*/./; q'`
  34186. +  ac_builddir=.
  34187. +
  34188. +if test "$ac_dir" != .; then
  34189. +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
  34190. +  # A "../" for each directory in $ac_dir_suffix.
  34191. +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
  34192. +else
  34193. +  ac_dir_suffix= ac_top_builddir=
  34194. +fi
  34195. +
  34196. +case $srcdir in
  34197. +  .)  # No --srcdir option.  We are building in place.
  34198. +    ac_srcdir=.
  34199. +    if test -z "$ac_top_builddir"; then
  34200. +       ac_top_srcdir=.
  34201. +    else
  34202. +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
  34203. +    fi ;;
  34204. +  [\\/]* | ?:[\\/]* )  # Absolute path.
  34205. +    ac_srcdir=$srcdir$ac_dir_suffix;
  34206. +    ac_top_srcdir=$srcdir ;;
  34207. +  *) # Relative path.
  34208. +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
  34209. +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
  34210. +esac
  34211. +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
  34212. +# absolute.
  34213. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
  34214. +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
  34215. +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
  34216. +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
  34217. +
  34218. +
  34219. +  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
  34220. +echo "$as_me: executing $ac_dest commands" >&6;}
  34221. +  case $ac_dest in
  34222. +    default-1 ) case "$CONFIG_FILES" in *po/Makefile.in*)
  34223. +        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
  34224. +      esac ;;
  34225. +    default )
  34226.  . $srcdir/configure.lang
  34227.  case x$CONFIG_HEADERS in
  34228.  xauto-host.h:config.in)
  34229. @@ -9206,10 +13822,37 @@
  34230.    echo creating libintl.h
  34231.    echo '#include "intl/libintl.h"' >libintl.h
  34232.  fi
  34233. + ;;
  34234. +  esac
  34235. +done
  34236. +_ACEOF
  34237.  
  34238. -exit 0
  34239. -EOF
  34240. +cat >>$CONFIG_STATUS <<\_ACEOF
  34241. +
  34242. +{ (exit 0); exit 0; }
  34243. +_ACEOF
  34244.  chmod +x $CONFIG_STATUS
  34245. -rm -fr confdefs* $ac_clean_files
  34246. -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
  34247. +ac_clean_files=$ac_clean_files_save
  34248. +
  34249. +
  34250. +# configure is writing to config.log, and then calls config.status.
  34251. +# config.status does its own redirection, appending to config.log.
  34252. +# Unfortunately, on DOS this fails, as config.log is still kept open
  34253. +# by configure, so config.status won't be able to write to it; its
  34254. +# output is simply discarded.  So we exec the FD to /dev/null,
  34255. +# effectively closing config.log, so it can be properly (re)opened and
  34256. +# appended to by config.status.  When coming back to configure, we
  34257. +# need to make the FD available again.
  34258. +if test "$no_create" != yes; then
  34259. +  ac_cs_success=:
  34260. +  ac_config_status_args=
  34261. +  test "$silent" = yes &&
  34262. +    ac_config_status_args="$ac_config_status_args --quiet"
  34263. +  exec 5>/dev/null
  34264. +  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
  34265. +  exec 5>>config.log
  34266. +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  34267. +  # would make configure fail if this is the last instruction.
  34268. +  $ac_cs_success || { (exit 1); exit 1; }
  34269. +fi
  34270.  
  34271. diff -urNEBb gcc-2.95.3-orig/gcc/configure.in gcc-2.95.3/gcc/configure.in
  34272. --- gcc-2.95.3-orig/gcc/configure.in    2001-01-25 15:03:02.000000000 +0100
  34273. +++ gcc-2.95.3/gcc/configure.in    2003-12-02 17:50:54.000000000 +0100
  34274. @@ -1081,6 +1081,24 @@
  34275.          fi
  34276.          ;;
  34277.  changequote(,)dnl
  34278. +        i[34567]86-*-macosx* | \
  34279. +        i[34567]86-*-darwin*)
  34280. +changequote([,])dnl
  34281. +              out_file=i386/openstep.c
  34282. +              xm_file=i386/xm-openstep.h
  34283. +        xm_defines="SYS_SIGLIST_DECLARED"
  34284. +              tm_file=i386/openstep.h
  34285. +              tmake_file=apple/t-apple
  34286. +              xmake_file=apple/x-darwin
  34287. +              extra_objs=machopic.o
  34288. +              extra_passes=cc1obj
  34289. +              fixincludes=Makefile.in # On NeXT, the headers are ok already.
  34290. +              if [ x$enable_threads = xyes ]; then
  34291. +                      thread_file='mach'
  34292. +              fi
  34293. +              makefile_cond="$makefile_cond next-headers"
  34294. +              ;;
  34295. +changequote(,)dnl
  34296.      i[34567]86-sequent-bsd*)         # 80386 from Sequent
  34297.  changequote([,])dnl
  34298.          use_collect2=yes
  34299. @@ -2118,6 +2136,14 @@
  34300.          extra_headers=math-68881.h
  34301.          float_format=m68k
  34302.          ;;
  34303. +    m68k-*-amigaos*)
  34304. +                xm_file=m68k/xm-amigaos.h
  34305. +                tm_file=m68k/amigaos.h
  34306. +                tmake_file=m68k/t-amigaos
  34307. +                xmake_file=m68k/x-amigaos
  34308. +                extra_objs=amigaos.o
  34309. +                gnu_ld=yes
  34310. +                ;;
  34311.  
  34312.      m88k-dg-dgux*)
  34313.          case $machine in
  34314. @@ -2753,6 +2779,15 @@
  34315.      romp-*-openbsd*)
  34316.          # Nothing special
  34317.          ;;
  34318. +    powerpc-*-amiga*)
  34319. +        cpu_type=rs6000
  34320. +        tm_file=rs6000/amigaos.h
  34321. +        xm_file=rs6000/xm-amigaos.h
  34322. +        tmake_file=rs6000/t-amigaos
  34323. +        xmake_file=rs6000/x-amigaos
  34324. +        extra_objs=amigaos.o
  34325. +        use_collect2=yes
  34326. +        ;;
  34327.      powerpc-*-openbsd*)
  34328.          tmake_file="${tmake_file} rs6000/t-rs6000 rs6000/t-openbsd"
  34329.          ;;
  34330. @@ -2841,6 +2876,25 @@
  34331.              thread_file='posix'
  34332.          fi
  34333.          ;;
  34334. +    powerpc-*-macosx* | powerpc-*-darwin*)
  34335. +              cpu_type=rs6000
  34336. +              tm_file=rs6000/macosx.h
  34337. +              out_file=rs6000/macosx.c
  34338. +              xm_file=rs6000/xm-macosx.h
  34339. +        xm_defines="SYS_SIGLIST_DECLARED"
  34340. +              tmake_file=rs6000/t-macosx
  34341. +              xmake_file=apple/x-darwin
  34342. +              extra_objs=machopic.o
  34343. +              extra_passes=cc1obj
  34344. +              fixincludes=Makefile.in # On NeXT, the headers are ok already.
  34345. +              makefile_conf="$makefile_cond next-headers"
  34346. +              ;;
  34347. +       powerpc-*-macos*)
  34348. +              out_file=rs6000/macos.c
  34349. +              tm_file=rs6000/macos.h
  34350. +              tmake_file=rs6000/t-macos
  34351. +              fixincludes=Makefile.in
  34352. +              ;;
  34353.          powerpc-wrs-vxworks*)
  34354.                  cpu_type=rs6000
  34355.          xm_file="xm-siglist.h rs6000/xm-sysv4.h"
  34356. diff -urNEBb gcc-2.95.3-orig/gcc/cp/typeck.c gcc-2.95.3/gcc/cp/typeck.c
  34357. --- gcc-2.95.3-orig/gcc/cp/typeck.c    1999-08-09 10:46:20.000000000 +0200
  34358. +++ gcc-2.95.3/gcc/cp/typeck.c    2003-12-02 17:50:55.000000000 +0100
  34359. @@ -3003,6 +3003,14 @@
  34360.    /* fntype now gets the type of function pointed to.  */
  34361.    fntype = TREE_TYPE (fntype);
  34362.  
  34363. +  if (lookup_attribute("libcall", TYPE_ATTRIBUTES(fntype))) 
  34364. +   if (TREE_CODE(function)==COMPONENT_REF)
  34365. +    params = chainon (build_tree_list(NULL_TREE, 
  34366. +                                      build1(ADDR_EXPR,build_pointer_type(TREE_TYPE(TREE_OPERAND(function,0))),
  34367. +                             TREE_OPERAND(function,0))
  34368. +                      )
  34369. +              , params);
  34370. +
  34371.    /* Convert the parameters to the types declared in the
  34372.       function prototype, or apply default promotions.  */
  34373.  
  34374. diff -urNEBb gcc-2.95.3-orig/gcc/cppfiles.c gcc-2.95.3/gcc/cppfiles.c
  34375. --- gcc-2.95.3-orig/gcc/cppfiles.c    1999-05-10 17:24:33.000000000 +0200
  34376. +++ gcc-2.95.3/gcc/cppfiles.c    2003-12-02 17:50:55.000000000 +0100
  34377. @@ -57,12 +57,23 @@
  34378.  #ifdef VMS
  34379.  #define INO_T_EQ(a, b) (!bcmp((char *) &(a), (char *) &(b), sizeof (a)))
  34380.  #elif (defined _WIN32 && !defined CYGWIN && ! defined (_UWIN)) \
  34381. -       || defined __MSDOS__
  34382. +       || defined __MSDOS__ || defined __amigaos__
  34383.  #define INO_T_EQ(a, b) 0
  34384.  #else
  34385.  #define INO_T_EQ(a, b) ((a) == (b))
  34386.  #endif
  34387.  
  34388. +#ifdef __amigaos__
  34389. +#include <limits.h>
  34390. +#endif /* __amigaos__ */
  34391. +
  34392. +#undef OPEN_CASE_SENSITIVE
  34393. +
  34394. +#ifndef OPEN_CASE_SENSITIVE
  34395. +/* Default is standard open() */
  34396. +#define OPEN_CASE_SENSITIVE open
  34397. +#endif
  34398. +
  34399.  /* Merge the four include chains together in the order quote, bracket,
  34400.     system, after.  Remove duplicate dirs (as determined by
  34401.     INO_T_EQ()).  The system_include and after_include chains are never
  34402. @@ -318,7 +329,12 @@
  34403.    
  34404.    ih = include_hash (pfile, fname, 1);
  34405.    jh = redundant_include_p (pfile, ih,
  34406. -                fname[0] == '/' ? ABSOLUTE_PATH : search_start);
  34407. +#ifdef FILE_NAME_ABSOLUTE_P
  34408. +                FILE_NAME_ABSOLUTE_P (fname)
  34409. +#else
  34410. +                fname[0] == '/'
  34411. +#endif
  34412. +                ? ABSOLUTE_PATH : search_start);
  34413.  
  34414.    if (jh != 0)
  34415.      {
  34416. @@ -328,7 +344,7 @@
  34417.        if (jh == (struct include_hash *)-1)
  34418.      return -2;
  34419.        else
  34420. -    return open (jh->name, O_RDONLY, 0666);
  34421. +    return OPEN_CASE_SENSITIVE (jh->name, O_RDONLY, 0666);
  34422.      }
  34423.  
  34424.    if (ih->foundhere)
  34425. @@ -354,11 +370,15 @@
  34426.    ih->control_macro = NULL;
  34427.    
  34428.    /* If the pathname is absolute, just open it. */ 
  34429. +#ifdef FILE_NAME_ABSOLUTE_P
  34430. +  if (FILE_NAME_ABSOLUTE_P (fname))
  34431. +#else
  34432.    if (fname[0] == '/')
  34433. +#endif
  34434.      {
  34435.        ih->foundhere = ABSOLUTE_PATH;
  34436.        ih->name = ih->nshort;
  34437. -      return open (ih->name, O_RDONLY, 0666);
  34438. +      return OPEN_CASE_SENSITIVE (ih->name, O_RDONLY, 0666);
  34439.      }
  34440.  
  34441.    /* Search directory path, trying to open the file. */
  34442. @@ -369,13 +389,20 @@
  34443.    for (l = search_start; l; l = l->next)
  34444.      {
  34445.        bcopy (l->name, name, l->nlen);
  34446. +#ifdef VOL_SEPARATOR
  34447. +      if (name[l->nlen - 1] == VOL_SEPARATOR)
  34448. +    strcpy (&name[l->nlen], fname);
  34449. +      else
  34450. +#endif
  34451. +  {
  34452.        name[l->nlen] = '/';
  34453.        strcpy (&name[l->nlen+1], fname);
  34454. +  }
  34455.        simplify_pathname (name);
  34456.        if (CPP_OPTIONS (pfile)->remap)
  34457.      name = remap_filename (pfile, name, l);
  34458.  
  34459. -      f = open (name, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666);
  34460. +      f = OPEN_CASE_SENSITIVE (name, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666);
  34461.  #ifdef EACCES
  34462.        if (f == -1 && errno == EACCES)
  34463.      {
  34464. @@ -723,6 +750,18 @@
  34465.    
  34466.    dir = xstrdup (fname);
  34467.    last_slash = rindex (dir, '/');
  34468. +
  34469. +#ifdef VOL_SEPARATOR
  34470. +  {
  34471. +    char *last_sep;
  34472. +    last_sep = rindex (dir, VOL_SEPARATOR);
  34473. +    if (last_sep)
  34474. +      last_sep++; /* Keep VOL_SEPARATOR.  */
  34475. +    if (last_sep > last_slash)
  34476. +      last_slash = last_sep;
  34477. +  }
  34478. +#endif
  34479. +
  34480.    if (last_slash)
  34481.      {
  34482.        if (last_slash == dir)
  34483. diff -urNEBb gcc-2.95.3-orig/gcc/doprint.c gcc-2.95.3/gcc/doprint.c
  34484. --- gcc-2.95.3-orig/gcc/doprint.c    1999-01-06 21:44:19.000000000 +0100
  34485. +++ gcc-2.95.3/gcc/doprint.c    2003-12-02 17:50:55.000000000 +0100
  34486. @@ -16,7 +16,6 @@
  34487.  along with this program; if not, write to the Free Software
  34488.  Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  34489.  
  34490. - */
  34491.  
  34492.  #include "config.h"
  34493.  #include "system.h"
  34494. @@ -114,6 +113,7 @@
  34495.            wide_width = 2;
  34496.            break;
  34497.          default:
  34498. +            #undef abort
  34499.            abort();
  34500.          }
  34501.            *sptr++ = *ptr++;
  34502. diff -urNEBb gcc-2.95.3-orig/gcc/f/version.c gcc-2.95.3/gcc/f/version.c
  34503. --- gcc-2.95.3-orig/gcc/f/version.c    2001-03-16 13:52:16.000000000 +0100
  34504. +++ gcc-2.95.3/gcc/f/version.c    2003-12-02 17:50:55.000000000 +0100
  34505. @@ -1 +1 @@
  34506. -const char *ffe_version_string = "0.5.25 20010315 (release)";
  34507. +const char *ffe_version_string = "0.5.25 20010315 (Amiga, Inc. build 20030831)";
  34508. diff -urNEBb gcc-2.95.3-orig/gcc/fixinc/fixincl.c gcc-2.95.3/gcc/fixinc/fixincl.c
  34509. --- gcc-2.95.3-orig/gcc/fixinc/fixincl.c    1999-06-07 22:26:07.000000000 +0200
  34510. +++ gcc-2.95.3/gcc/fixinc/fixincl.c    2003-12-02 17:50:55.000000000 +0100
  34511. @@ -345,10 +345,12 @@
  34512.        */
  34513.    run_compiles ();
  34514.  
  34515. +#ifndef __amigaos4__
  34516.    signal (SIGQUIT, SIG_IGN);
  34517.    signal (SIGIOT,  SIG_IGN);
  34518.    signal (SIGPIPE, SIG_IGN);
  34519.    signal (SIGALRM, SIG_IGN);
  34520. +#endif
  34521.    signal (SIGTERM, SIG_IGN);
  34522.  
  34523.    /*
  34524. diff -urNEBb gcc-2.95.3-orig/gcc/fixinc/server.c gcc-2.95.3/gcc/fixinc/server.c
  34525. --- gcc-2.95.3-orig/gcc/fixinc/server.c    1999-05-30 15:45:17.000000000 +0200
  34526. +++ gcc-2.95.3/gcc/fixinc/server.c    2003-12-02 17:50:55.000000000 +0100
  34527. @@ -180,7 +180,11 @@
  34528.  {
  34529.    if (server_id != NULLPROCESS)
  34530.      {
  34531. +#ifdef __amigaos4__
  34532. +      kill ((pid_t) server_id, SIGTERM);
  34533. +#else
  34534.        kill ((pid_t) server_id, SIGKILL);
  34535. +#endif
  34536.        server_id = NULLPROCESS;
  34537.        fclose (server_pair.pf_read);
  34538.        fclose (server_pair.pf_write);
  34539. @@ -222,8 +226,10 @@
  34540.    if (atexit_done++ == 0)
  34541.      atexit (&close_server);
  34542.  
  34543. +#ifndef __amigaos4__
  34544.    signal (SIGPIPE, sig_handler);
  34545.    signal (SIGALRM, sig_handler);
  34546. +#endif
  34547.  
  34548.    fputs ("trap : 1\n", server_pair.pf_write);
  34549.    fflush (server_pair.pf_write);
  34550. diff -urNEBb gcc-2.95.3-orig/gcc/genattrtab.c gcc-2.95.3/gcc/genattrtab.c
  34551. --- gcc-2.95.3-orig/gcc/genattrtab.c    1999-04-16 21:52:21.000000000 +0200
  34552. +++ gcc-2.95.3/gcc/genattrtab.c    2003-12-02 17:50:55.000000000 +0100
  34553. @@ -104,6 +104,10 @@
  34554.  # include <sys/resource.h>
  34555.  #endif
  34556.  
  34557. +#ifdef __amigaos__
  34558. +#include <limits.h>
  34559. +#endif /* __amigaos__ */
  34560. +
  34561.  /* We must include obstack.h after <sys/time.h>, to avoid lossage with
  34562.     /usr/include/sys/stdtypes.h on Sun OS 4.x.  */
  34563.  #include "obstack.h"
  34564. diff -urNEBb gcc-2.95.3-orig/gcc/getpwd.c gcc-2.95.3/gcc/getpwd.c
  34565. --- gcc-2.95.3-orig/gcc/getpwd.c    1998-12-16 21:56:28.000000000 +0100
  34566. +++ gcc-2.95.3/gcc/getpwd.c    2003-12-02 17:50:55.000000000 +0100
  34567. @@ -7,7 +7,7 @@
  34568.     BSD systems) now provides getcwd as called for by POSIX.  Allow for
  34569.     the few exceptions to the general rule here.  */
  34570.  
  34571. -#if !(defined (POSIX) || defined (USG) || defined (VMS)) || defined (HAVE_GETWD)
  34572. +#if !(defined (POSIX) || defined (USG) || defined (VMS) || defined(__amigaos__)) || defined (HAVE_GETWD)
  34573.  #define getcwd(buf,len) getwd(buf)
  34574.  #ifdef MAXPATHLEN
  34575.  #define GUESSPATHLEN (MAXPATHLEN + 1)
  34576. diff -urNEBb gcc-2.95.3-orig/gcc/ginclude/va-ppc.h gcc-2.95.3/gcc/ginclude/va-ppc.h
  34577. --- gcc-2.95.3-orig/gcc/ginclude/va-ppc.h    1999-08-09 07:55:16.000000000 +0200
  34578. +++ gcc-2.95.3/gcc/ginclude/va-ppc.h    2003-12-02 17:50:55.000000000 +0100
  34579. @@ -190,6 +190,20 @@
  34580.    __ptr;                                   \
  34581.  }))
  34582.  
  34583. +
  34584. +#if defined(__AMIGA__) && defined (__PPC__)
  34585. +
  34586. +/* OS4 linear vararg support */
  34587. +#define va_startlinear(AP, x)            \
  34588. +           va_start(AP, x);            \
  34589. +           (AP)->gpr = 8;            \
  34590. +           (AP)->fpr = 8;
  34591. +
  34592. +#define va_getlinearva(AP,TYPE)                 \
  34593. +           (TYPE)__va_overflow(AP)
  34594. +
  34595. +#endif
  34596. +
  34597.  #define va_end(AP)    ((void)0)
  34598.  
  34599.  /* Copy __gnuc_va_list into another variable of this type.  */
  34600. diff -urNEBb gcc-2.95.3-orig/gcc/intl/dcgettext.c gcc-2.95.3/gcc/intl/dcgettext.c
  34601. --- gcc-2.95.3-orig/gcc/intl/dcgettext.c    1998-12-17 07:45:44.000000000 +0100
  34602. +++ gcc-2.95.3/gcc/intl/dcgettext.c    2003-12-02 17:50:55.000000000 +0100
  34603. @@ -18,7 +18,7 @@
  34604.  #ifdef HAVE_CONFIG_H
  34605.  # include <config.h>
  34606.  #endif
  34607. -
  34608. +#define HAVE_GETCWD
  34609.  #include <sys/types.h>
  34610.  
  34611.  #ifdef __GNUC__
  34612. @@ -99,6 +99,7 @@
  34613.  char *getwd ();
  34614.  #  define getcwd(buf, max) getwd (buf)
  34615.  # else
  34616. +#undef getcwd
  34617.  char *getcwd ();
  34618.  # endif
  34619.  # ifndef HAVE_STPCPY
  34620. diff -urNEBb gcc-2.95.3-orig/gcc/libgcc2.c gcc-2.95.3/gcc/libgcc2.c
  34621. --- gcc-2.95.3-orig/gcc/libgcc2.c    1999-06-11 05:11:43.000000000 +0200
  34622. +++ gcc-2.95.3/gcc/libgcc2.c    2003-12-02 17:50:55.000000000 +0100
  34623. @@ -60,9 +60,9 @@
  34624.  /* In a cross-compilation situation, default to inhibiting compilation
  34625.     of routines that use libc.  */
  34626.  
  34627. -#if defined(CROSS_COMPILE) && !defined(inhibit_libc)
  34628. +/*#if defined(CROSS_COMPILE) && !defined(inhibit_libc)
  34629.  #define inhibit_libc
  34630. -#endif
  34631. +#endif*/
  34632.  
  34633.  /* Permit the tm.h file to select the endianness to use just for this
  34634.     file.  This is used when the endianness is determined when the
  34635. diff -urNEBb gcc-2.95.3-orig/gcc/protoize.c gcc-2.95.3/gcc/protoize.c
  34636. --- gcc-2.95.3-orig/gcc/protoize.c    1999-04-16 21:52:36.000000000 +0200
  34637. +++ gcc-2.95.3/gcc/protoize.c    2003-12-02 17:50:55.000000000 +0100
  34638. @@ -62,7 +62,7 @@
  34639.  #undef abort
  34640.  
  34641.  #if ! defined (_WIN32) || defined (__CYGWIN__) || defined (_UWIN)
  34642. -#if defined(POSIX) || defined(CONCURRENT)
  34643. +#if defined(POSIX) || defined(CONCURRENT) || defined(__amigaos__)
  34644.  #include <dirent.h>
  34645.  #else
  34646.  #include <sys/dir.h>
  34647. diff -urNEBb gcc-2.95.3-orig/gcc/toplev.c gcc-2.95.3/gcc/toplev.c
  34648. --- gcc-2.95.3-orig/gcc/toplev.c    2001-01-25 15:03:23.000000000 +0100
  34649. +++ gcc-2.95.3/gcc/toplev.c    2003-12-02 17:50:55.000000000 +0100
  34650. @@ -139,7 +139,7 @@
  34651.  
  34652.  extern int rtx_equal_function_value_matters;
  34653.  
  34654. -#if ! (defined (VMS) || defined (OS2))
  34655. +#if ! (defined (VMS) || defined (OS2) || defined(__amigaos4__))
  34656.  extern char **environ;
  34657.  #endif
  34658.  extern char *version_string, *language_string;
  34659. @@ -924,6 +924,10 @@
  34660.    {"pic", &flag_pic, 1,
  34661.     "Generate position independent code, if possible"},
  34662.    {"PIC", &flag_pic, 2, ""},
  34663. +  {"baserel", &flag_pic, 3,
  34664. +   "Generate base relative code"},
  34665. +  {"baserel32", &flag_pic, 4,
  34666. +   "Generate base relative code with no data limits"},
  34667.    {"exceptions", &flag_exceptions, 1,
  34668.     "Enable exception handling" },
  34669.    {"new-exceptions", &flag_new_exceptions, 1,
  34670. @@ -1336,6 +1340,9 @@
  34671.    if (quiet_flag)
  34672.      return 0;
  34673.  
  34674. +#ifdef __amigaos__
  34675. +  return 0;
  34676. +#else
  34677.  #ifdef __BEOS__
  34678.    return 0;
  34679.  #else /* not BeOS */
  34680. @@ -1395,6 +1402,7 @@
  34681.  #endif  /* _SC_CLK_TCK */
  34682.  #endif    /* _WIN32 */
  34683.  #endif    /* __BEOS__ */
  34684. +#endif  /* __amigaos__ */
  34685.  }
  34686.  
  34687.  #define TIMEVAR(VAR, BODY)    \
  34688. @@ -2569,7 +2577,11 @@
  34689.    /* NA gets INPUT_NAME sans directory names.  */
  34690.    while (na > input_name)
  34691.      {
  34692. -      if (na[-1] == '/')
  34693. +      if (na[-1] == '/'
  34694. +#ifdef VOL_SEPARATOR
  34695. +      || na[-1] == VOL_SEPARATOR
  34696. +#endif
  34697. +      )
  34698.      break;
  34699.  #ifdef DIR_SEPARATOR
  34700.        if (na[-1] == DIR_SEPARATOR)
  34701. @@ -4776,6 +4788,9 @@
  34702.  #ifdef DIR_SEPARATOR
  34703.       && p[-1] != DIR_SEPARATOR
  34704.  #endif
  34705. +#ifdef VOL_SEPARATOR
  34706. +     && p[-1] != VOL_SEPARATOR
  34707. +#endif
  34708.       )
  34709.      --p;
  34710.    progname = p;
  34711. @@ -5449,7 +5464,7 @@
  34712.  
  34713.    compile_file (filename);
  34714.  
  34715. -#if !defined(OS2) && !defined(VMS) && (!defined(_WIN32) || defined (__CYGWIN__)) && !defined(__INTERIX)
  34716. +#if !defined(OS2) && !defined(VMS) && (!defined(_WIN32) || defined (__CYGWIN__)) && !defined(__INTERIX) && !defined (__amigaos__)
  34717.    if (flag_print_mem)
  34718.      {
  34719.        char *lim = (char *) sbrk (0);
  34720. @@ -5465,7 +5480,7 @@
  34721.  #endif /* not USG */
  34722.  #endif
  34723.      }
  34724. -#endif /* ! OS2 && ! VMS && (! _WIN32 || CYGWIN) && ! __INTERIX */
  34725. +#endif /* ! OS2 && ! VMS && (! _WIN32 || CYGWIN) && ! __INTERIX && ! __amigaos__*/
  34726.  
  34727.    if (errorcount)
  34728.      exit (FATAL_EXIT_CODE);
  34729. diff -urNEBb gcc-2.95.3-orig/gcc/version.c gcc-2.95.3/gcc/version.c
  34730. --- gcc-2.95.3-orig/gcc/version.c    2001-03-16 13:52:12.000000000 +0100
  34731. +++ gcc-2.95.3/gcc/version.c    2003-12-02 17:50:55.000000000 +0100
  34732. @@ -1 +1 @@
  34733. -char *version_string = "2.95.3 20010315 (release)";
  34734. +char *version_string = "2.95.3 20010315 (Amiga, Inc. build 20030831)";
  34735. diff -urNEBb gcc-2.95.3-orig/libiberty/choose-temp.c gcc-2.95.3/libiberty/choose-temp.c
  34736. --- gcc-2.95.3-orig/libiberty/choose-temp.c    1999-04-25 02:23:06.000000000 +0200
  34737. +++ gcc-2.95.3/libiberty/choose-temp.c    2003-12-02 17:50:55.000000000 +0100
  34738. @@ -26,6 +26,8 @@
  34739.  #include "config.h"
  34740.  #endif
  34741.  
  34742. +#undef HAVE_SYS_FILE_H
  34743. +
  34744.  #include <stdio.h>    /* May get P_tmpdir.  */
  34745.  #include <sys/types.h>
  34746.  #ifdef HAVE_UNISTD_H
  34747. @@ -51,6 +53,9 @@
  34748.  #if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN__) && ! defined (_UWIN))
  34749.  #define DIR_SEPARATOR '\\'
  34750.  #endif
  34751. +#ifdef __amigaos__
  34752. +#define VOL_SEPARATOR ':'
  34753. +#endif
  34754.  #endif
  34755.  
  34756.  #ifndef DIR_SEPARATOR
  34757. @@ -117,7 +122,9 @@
  34758.  #endif
  34759.  
  34760.    /* Try /usr/tmp, then /tmp.  */
  34761. +  #if !defined(__amigaos__)
  34762.    base = try (usrtmp, base);
  34763. +  #endif
  34764.    base = try (tmp, base);
  34765.   
  34766.    /* If all else fails, use the current directory!  */
  34767. @@ -131,7 +138,11 @@
  34768.  
  34769.    if (len != 0
  34770.        && temp_filename[len-1] != '/'
  34771. -      && temp_filename[len-1] != DIR_SEPARATOR)
  34772. +      && temp_filename[len-1] != DIR_SEPARATOR
  34773. +#ifdef VOL_SEPARATOR
  34774. +      && temp_filename[len-1] != VOL_SEPARATOR
  34775. +#endif
  34776. +      )
  34777.      temp_filename[len++] = DIR_SEPARATOR;
  34778.    strcpy (temp_filename + len, TEMP_FILE);
  34779.  
  34780. diff -urNEBb gcc-2.95.3-orig/libiberty/getcwd.c gcc-2.95.3/libiberty/getcwd.c
  34781. --- gcc-2.95.3-orig/libiberty/getcwd.c    1999-05-26 05:04:08.000000000 +0200
  34782. +++ gcc-2.95.3/libiberty/getcwd.c    2003-12-02 17:50:55.000000000 +0100
  34783. @@ -25,6 +25,8 @@
  34784.  
  34785.  #include "config.h"
  34786.  
  34787. +#undef HAVE_SYS_PARAM_H
  34788. +
  34789.  #ifdef HAVE_SYS_PARAM_H
  34790.  #include <sys/param.h>
  34791.  #endif
  34792. diff -urNEBb gcc-2.95.3-orig/libiberty/getpagesize.c gcc-2.95.3/libiberty/getpagesize.c
  34793. --- gcc-2.95.3-orig/libiberty/getpagesize.c    1998-05-21 09:52:39.000000000 +0200
  34794. +++ gcc-2.95.3/libiberty/getpagesize.c    2003-12-02 17:50:55.000000000 +0100
  34795. @@ -30,6 +30,8 @@
  34796.  
  34797.  #include "config.h"
  34798.  
  34799. +#undef HAVE_SYS_PARAM_H
  34800. +
  34801.  #include <sys/types.h>
  34802.  #ifdef HAVE_SYS_PARAM_H
  34803.  #include <sys/param.h>
  34804. diff -urNEBb gcc-2.95.3-orig/libiberty/pexecute.c gcc-2.95.3/libiberty/pexecute.c
  34805. --- gcc-2.95.3-orig/libiberty/pexecute.c    1999-04-12 00:21:27.000000000 +0200
  34806. +++ gcc-2.95.3/libiberty/pexecute.c    2003-12-02 17:50:55.000000000 +0100
  34807. @@ -116,7 +116,7 @@
  34808.     runs the requested programs.
  34809.  */
  34810.  
  34811. -#ifdef __MSDOS__
  34812. +#if defined(__MSDOS__) && !defined(__amigaos__)
  34813.  
  34814.  /* MSDOS doesn't multitask, but for the sake of a consistent interface
  34815.     the code behaves like it does.  pexecute runs the program, tucks the
  34816. @@ -230,7 +230,7 @@
  34817.  
  34818.  #endif /* MSDOS */
  34819.  
  34820. -#if defined (_WIN32) && ! defined (_UWIN)
  34821. +#if defined (_WIN32) && ! defined (_UWIN) && !defined(__amigaos__)
  34822.  
  34823.  #include <process.h>
  34824.  
  34825. @@ -602,7 +602,7 @@
  34826.  
  34827.  /* include for Unix-like environments but not for Dos-like environments */
  34828.  #if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \
  34829. -    && ! (defined (_WIN32) && ! defined (_UWIN))
  34830. +    && ! (defined (_WIN32) && ! defined (_UWIN)) && ! defined(__amigaos__)
  34831.  
  34832.  extern int execv ();
  34833.  extern int execvp ();
  34834. @@ -732,3 +732,126 @@
  34835.  }
  34836.  
  34837.  #endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! (_WIN32 && ! _UWIN) */
  34838. +
  34839. +#if defined(__amigaos__)
  34840. +
  34841. +/* For communicating information from pexecute to pwait.  */
  34842. +static int last_pid = 0;
  34843. +static int last_status = 0;
  34844. +static int last_reaped = 0;
  34845. +
  34846. +int
  34847. +pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
  34848. +     const char *program;
  34849. +     char * const *argv;
  34850. +     const char *this_pname;
  34851. +     const char *temp_base;
  34852. +     char **errmsg_fmt, **errmsg_arg;
  34853. +     int flags;
  34854. +{
  34855. +  int rc;
  34856. +  char *scmd,*s;
  34857. +  int i,j,c,len,arglen;
  34858. +  int need_quote;
  34859. +
  34860. +  last_pid++;
  34861. +  if (last_pid < 0)
  34862. +    last_pid = 1;
  34863. +
  34864. +  if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
  34865. +    abort ();
  34866. +
  34867. +  len = 0;
  34868. +
  34869. +  for(i = 0 ; argv[i] != NULL ; i++)
  34870. +  {
  34871. +    arglen = strlen(argv[i]);
  34872. +
  34873. +    len += 1 + arglen;
  34874. +
  34875. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  34876. +    {
  34877. +      c = argv[i][j];
  34878. +
  34879. +      if(isspace(c))
  34880. +        need_quote = 1;
  34881. +      else if (c == '\"')
  34882. +        len++;
  34883. +    }
  34884. +
  34885. +    if(need_quote)
  34886. +      len += 2;
  34887. +  }
  34888. +
  34889. +  s = scmd = (char *) xmalloc (len+1);
  34890. +
  34891. +  for(i = 0 ; argv[i] != NULL ; i++)
  34892. +  {
  34893. +    arglen = strlen(argv[i]);
  34894. +
  34895. +    for(j = 0, need_quote = 0 ; j < arglen ; j++)
  34896. +    {
  34897. +      if(isspace(argv[i][j]))
  34898. +        need_quote = 1;
  34899. +    }
  34900. +
  34901. +    if(s != scmd)
  34902. +      (*s++) = ' ';
  34903. +
  34904. +    if(need_quote)
  34905. +      (*s++) = '\"';
  34906. +
  34907. +    for(j = 0 ; j < arglen ; j++)
  34908. +    {
  34909. +      c = argv[i][j];
  34910. +      if(c == '\"')
  34911. +        (*s++) = '*';
  34912. +
  34913. +      (*s++) = c;
  34914. +    }
  34915. +
  34916. +    if(need_quote)
  34917. +      (*s++) = '\"';
  34918. +  }
  34919. +
  34920. +  (*s) = '\0';
  34921. +
  34922. +  rc = system (scmd);
  34923. +
  34924. +  free (scmd);
  34925. +
  34926. +  if (rc == -1)
  34927. +    {
  34928. +      *errmsg_fmt = install_error_msg;
  34929. +      *errmsg_arg = program;
  34930. +      return -1;
  34931. +    }
  34932. +
  34933. +  /* Tuck the status away for pwait, and return a "pid".  */
  34934. +  last_status = rc << 8;
  34935. +  return last_pid;
  34936. +}
  34937. +
  34938. +int
  34939. +pwait (pid, status, flags)
  34940. +     int pid;
  34941. +     int *status;
  34942. +     int flags;
  34943. +{
  34944. +  /* On MSDOS each pexecute must be followed by it's associated pwait.  */
  34945. +  if (pid != last_pid
  34946. +      /* Called twice for the same child?  */
  34947. +      || pid == last_reaped)
  34948. +    {
  34949. +      /* ??? ECHILD would be a better choice.  Can we use it here?  */
  34950. +      errno = EINVAL;
  34951. +      return -1;
  34952. +    }
  34953. +  /* ??? Here's an opportunity to canonicalize the values in STATUS.
  34954. +     Needed?  */
  34955. +  *status = last_status;
  34956. +  last_reaped = last_pid;
  34957. +  return last_pid;
  34958. +}
  34959. +
  34960. +#endif /* __amigaos__ */
  34961. diff -urNEBb gcc-2.95.3-orig/libiberty/strerror.c gcc-2.95.3/libiberty/strerror.c
  34962. --- gcc-2.95.3-orig/libiberty/strerror.c    1998-05-16 01:42:41.000000000 +0200
  34963. +++ gcc-2.95.3/libiberty/strerror.c    2003-12-03 13:59:53.000000000 +0100
  34964. @@ -462,7 +462,7 @@
  34965.  
  34966.  #else
  34967.  
  34968. -extern int sys_nerr;
  34969. +/*extern const int sys_nerr;*/
  34970.  extern char *sys_errlist[];
  34971.  
  34972.  #endif
  34973. diff -urNEBb gcc-2.95.3-orig/libiberty/strsignal.c gcc-2.95.3/libiberty/strsignal.c
  34974. --- gcc-2.95.3-orig/libiberty/strsignal.c    1998-05-16 01:42:42.000000000 +0200
  34975. +++ gcc-2.95.3/libiberty/strsignal.c    2003-12-02 17:50:55.000000000 +0100
  34976. @@ -7,6 +7,8 @@
  34977.  
  34978.  #include "config.h"
  34979.  
  34980. +#undef HAVE_SYS_SIGLIST
  34981. +
  34982.  /* We need to declare sys_siglist, because even if the system provides
  34983.     it we can't assume that it is declared in <signal.h> (for example,
  34984.     SunOS provides sys_siglist, but it does not declare it in any
  34985. @@ -370,6 +372,8 @@
  34986.  
  34987.  */
  34988.  
  34989. +#if !defined(__amigaos__)
  34990. +
  34991.  int
  34992.  signo_max ()
  34993.  {
  34994. @@ -383,6 +387,7 @@
  34995.    return (maxsize - 1);
  34996.  }
  34997.  
  34998. +#endif /* __amigaos__ */
  34999.  
  35000.  /*
  35001.  
  35002. @@ -414,6 +419,7 @@
  35003.  
  35004.  */
  35005.  
  35006. +#if !defined(__amigaos__)
  35007.  #ifndef HAVE_STRSIGNAL
  35008.  
  35009.  const char *
  35010. @@ -453,6 +459,7 @@
  35011.  }
  35012.  
  35013.  #endif /* ! HAVE_STRSIGNAL */
  35014. +#endif /* __amigaos__ */
  35015.  
  35016.  /*
  35017.  
  35018. diff -urNEBb gcc-2.95.3-orig/libiberty/vasprintf.c gcc-2.95.3/libiberty/vasprintf.c
  35019. --- gcc-2.95.3-orig/libiberty/vasprintf.c    1998-09-07 22:37:12.000000000 +0200
  35020. +++ gcc-2.95.3/libiberty/vasprintf.c    2003-12-02 17:50:55.000000000 +0100
  35021. @@ -31,6 +31,8 @@
  35022.  int global_total_width;
  35023.  #endif
  35024.  
  35025. +#undef vasprintf
  35026. +
  35027.  unsigned long strtoul ();
  35028.  char *malloc ();
  35029.  
  35030. diff -urNEBb gcc-2.95.3-orig/libiberty/vsprintf.c gcc-2.95.3/libiberty/vsprintf.c
  35031. --- gcc-2.95.3-orig/libiberty/vsprintf.c    1998-05-16 01:14:55.000000000 +0200
  35032. +++ gcc-2.95.3/libiberty/vsprintf.c    2003-12-02 17:50:55.000000000 +0100
  35033. @@ -37,6 +37,7 @@
  35034.       const char *format;
  35035.       va_list ap;
  35036.  {
  35037. +#if 0
  35038.    FILE b;
  35039.    int ret;
  35040.  #ifdef VMS
  35041. @@ -51,5 +52,5 @@
  35042.    ret = _doprnt(format, ap, &b);
  35043.    putc('\0', &b);
  35044.    return ret;
  35045. -
  35046. +#endif
  35047.  }
  35048. diff -urNEBb gcc-2.95.3-orig/libio/#iostream.cc# gcc-2.95.3/libio/#iostream.cc#
  35049. --- gcc-2.95.3-orig/libio/#iostream.cc#    1970-01-01 01:00:00.000000000 +0100
  35050. +++ gcc-2.95.3/libio/#iostream.cc#    2003-12-02 17:50:55.000000000 +0100
  35051. @@ -0,0 +1,1050 @@
  35052. +/* This is part of libio/iostream, providing -*- C++ -*- input/output.
  35053. +   Copyright (C) 1993, 1997, 2000 Free Software Foundation, Inc.
  35054. +
  35055. +   This file is part of the GNU IO Library.  This library is free
  35056. +   software; you can redistribute it and/or modify it under the
  35057. +   terms of the GNU General Public License as published by the
  35058. +   Free Software Foundation; either version 2, or (at your option)
  35059. +   any later version.
  35060. +
  35061. +   This library is distributed in the hope that it will be useful,
  35062. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  35063. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35064. +   GNU General Public License for more details.
  35065. +
  35066. +   You should have received a copy of the GNU General Public License
  35067. +   along with this library; see the file COPYING.  If not, write to the Free
  35068. +   Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  35069. +   USA.
  35070. +
  35071. +   As a special exception, if you link this library with files
  35072. +   compiled with a GNU compiler to produce an executable, this does not cause
  35073. +   the resulting executable to be covered by the GNU General Public License.
  35074. +   This exception does not however invalidate any other reasons why
  35075. +   the executable file might be covered by the GNU General Public License. */
  35076. +
  35077. +/* Written by Per Bothner (bothner@cygnus.com). */
  35078. +
  35079. +#ifdef __GNUC__
  35080. +#pragma implementation
  35081. +#endif
  35082. +#define _STREAM_COMPAT
  35083. +#include <iostream.h>
  35084. +#include "libioP.h"
  35085. +#include <stdio.h>  /* Needed for sprintf */
  35086. +#include <ctype.h>
  35087. +#include <string.h>
  35088. +#include <limits.h>
  35089. +
  35090. +
  35091. +#if _G_HAVE_PRINTF_FP
  35092. +#include <printf.h>
  35093. +extern "C" int __printf_fp (_IO_FILE *, const struct printf_info *,
  35094. +                const void *const *);
  35095. +#else
  35096. +#include "floatio.h"
  35097. +# ifndef _IO_USE_DTOA
  35098. +int __cvt_double(double number, register int prec, int flags, int *signp,
  35099. +                 int fmtch, char *startp, char *endp);
  35100. +# endif
  35101. +#endif
  35102. +
  35103. +#define    BUF        (MAXEXP+MAXFRACT+1)    /* + decimal point */
  35104. +
  35105. +//#define isspace(ch) ((ch)==' ' || (ch)=='\t' || (ch)=='\n')
  35106. +
  35107. +istream::istream(streambuf *sb, ostream* tied)
  35108. +{
  35109. +  init (sb, tied);
  35110. +  _gcount = 0;
  35111. +}
  35112. +
  35113. +int skip_ws(streambuf* sb)
  35114. +{
  35115. +    int ch;
  35116. +    for (;;) {
  35117. +    ch = sb->sbumpc();
  35118. +    if (ch == EOF || !isspace(ch))
  35119. +        return ch;
  35120. +    }
  35121. +}
  35122. +
  35123. +istream& istream::get(char& c)
  35124. +{
  35125. +    if (ipfx1()) {
  35126. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35127. +                  _strbuf);
  35128. +    int ch = _strbuf->sbumpc();
  35129. +    if (ch == EOF) {
  35130. +      set(ios::eofbit|ios::failbit);
  35131. +      _gcount = 0;
  35132. +    }
  35133. +    else {
  35134. +      c = (char)ch;
  35135. +      _gcount = 1;
  35136. +    }
  35137. +    isfx();
  35138. +    _IO_cleanup_region_end (0);
  35139. +    }
  35140. +    else
  35141. +      _gcount = 0;
  35142. +    return *this;
  35143. +}
  35144. +
  35145. +int istream::peek()
  35146. +{
  35147. +  if (!good())
  35148. +    return EOF;
  35149. +  if (_tie && rdbuf()->in_avail() == 0)
  35150. +    _tie->flush();
  35151. +  int ch = _strbuf->sgetc();
  35152. +  if (ch == EOF)
  35153. +    set(ios::eofbit);
  35154. +  return ch;
  35155. +}
  35156. +
  35157. +istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
  35158. +{
  35159. +    _gcount = 0;
  35160. +    if (ipfx1()) {
  35161. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35162. +                  _strbuf);
  35163. +    register streambuf* sb = _strbuf;
  35164. +    if (delim == EOF) {
  35165. +        _gcount = sb->ignore(n);
  35166. +        goto unlock;
  35167. +    }
  35168. +    for (;;) {
  35169. +#if 0
  35170. +        if (n != MAXINT) // FIXME
  35171. +#endif
  35172. +        if (--n < 0)
  35173. +        break;
  35174. +        int ch = sb->sbumpc();
  35175. +        if (ch == EOF) {
  35176. +        set(ios::eofbit|ios::failbit);
  35177. +        break;
  35178. +        }
  35179. +        _gcount++;
  35180. +        if (ch == delim)
  35181. +        break;
  35182. +    }
  35183. +    unlock:
  35184. +    isfx();
  35185. +    _IO_cleanup_region_end (0);
  35186. +    }
  35187. +    return *this;
  35188. +}
  35189. +
  35190. +istream& istream::read(char *s, streamsize n)
  35191. +{
  35192. +    if (ipfx1()) {
  35193. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35194. +                  _strbuf);
  35195. +    _gcount = _strbuf->sgetn(s, n);
  35196. +    if (_gcount != n)
  35197. +        set(ios::failbit|ios::eofbit);
  35198. +    isfx();
  35199. +    _IO_cleanup_region_end (0);
  35200. +    }
  35201. +    else
  35202. +      _gcount = 0;
  35203. +    return *this;
  35204. +}
  35205. +
  35206. +int
  35207. +istream::sync ()
  35208. +{
  35209. +  streambuf *sb = rdbuf ();
  35210. +  if (sb == NULL)
  35211. +    return EOF;
  35212. +  if (sb->sync ()) // Later: pubsync
  35213. +    {
  35214. +      setstate (ios::badbit);
  35215. +      return EOF;
  35216. +    }
  35217. +  else
  35218. +    return 0;
  35219. +}
  35220. +
  35221. +istream& istream::seekg(streampos pos)
  35222. +{
  35223. +    pos = _strbuf->pubseekpos(pos, ios::in);
  35224. +    if (pos == streampos(EOF))
  35225. +    set(ios::badbit);
  35226. +    return *this;
  35227. +}
  35228. +
  35229. +istream& istream::seekg(streamoff off, _seek_dir dir)
  35230. +{
  35231. +  streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_INPUT);
  35232. +  if (pos == streampos(EOF))
  35233. +    set(ios::badbit);
  35234. +  return *this;
  35235. +}
  35236. +
  35237. +streampos istream::tellg()
  35238. +{
  35239. +#if 0
  35240. +    streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::in);
  35241. +#else
  35242. +    streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_INPUT);
  35243. +#endif
  35244. +    if (pos == streampos(EOF))
  35245. +    set(ios::badbit);
  35246. +    return pos;
  35247. +}
  35248. +
  35249. +istream& istream::operator>>(char& c)
  35250. +{
  35251. +    if (ipfx0()) {
  35252. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35253. +                  _strbuf);
  35254. +    int ch = _strbuf->sbumpc();
  35255. +    if (ch == EOF)
  35256. +        set(ios::eofbit|ios::failbit);
  35257. +    else
  35258. +        c = (char)ch;
  35259. +    isfx();
  35260. +    _IO_cleanup_region_end (0);
  35261. +    }
  35262. +    return *this;
  35263. +}
  35264. +
  35265. +istream&
  35266. +istream::operator>> (char* ptr)
  35267. +{
  35268. +  register char *p = ptr;
  35269. +  int w = width(0);
  35270. +  if (ipfx0())
  35271. +    {
  35272. +      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35273. +                _strbuf);
  35274. +      register streambuf* sb = _strbuf;
  35275. +      for (;;)
  35276. +    {
  35277. +      int ch = sb->sbumpc();
  35278. +      if (ch == EOF)
  35279. +        {
  35280. +          set(ios::eofbit);
  35281. +          break;
  35282. +        }
  35283. +      else if (isspace(ch) || w == 1)
  35284. +        {
  35285. +          sb->sputbackc(ch);
  35286. +          break;
  35287. +        }
  35288. +      else *p++ = ch;
  35289. +      w--;
  35290. +    }
  35291. +      if (p == ptr)
  35292. +    set(ios::failbit);
  35293. +      isfx();
  35294. +      _IO_cleanup_region_end (0);
  35295. +    }
  35296. +  *p = '\0';
  35297. +  return *this;
  35298. +}
  35299. +
  35300. +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
  35301. +#define LONGEST long long
  35302. +#else
  35303. +#define LONGEST long
  35304. +#endif
  35305. +
  35306. +static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
  35307. +{
  35308. +    if (!stream.ipfx0())
  35309. +      return 0;
  35310. +    int retval;
  35311. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35312. +                  stream._strbuf);
  35313. +    register streambuf* sb = stream.rdbuf();
  35314. +    int base = 10;
  35315. +    int ndigits = 0;
  35316. +    register int ch = skip_ws(sb);
  35317. +    if (ch == EOF)
  35318. +    goto eof_fail;
  35319. +    neg = 0;
  35320. +    if (ch == '+') {
  35321. +    ch = skip_ws(sb);
  35322. +    }
  35323. +    else if (ch == '-') {
  35324. +    neg = 1;
  35325. +    ch = skip_ws(sb);
  35326. +    }
  35327. +    if (ch == EOF) goto eof_fail;
  35328. +    if (!(stream.flags() & ios::basefield)) {
  35329. +    if (ch == '0') {
  35330. +        ch = sb->sbumpc();
  35331. +        if (ch == EOF) {
  35332. +        val = 0;
  35333. +        goto unlock;
  35334. +        }
  35335. +        if (ch == 'x' || ch == 'X') {
  35336. +        base = 16;
  35337. +        ch = sb->sbumpc();
  35338. +        if (ch == EOF) goto eof_fail;
  35339. +        }
  35340. +        else {
  35341. +        sb->sputbackc(ch);
  35342. +        base = 8;
  35343. +        ch = '0';
  35344. +        }
  35345. +    }
  35346. +    }
  35347. +    else if ((stream.flags() & ios::basefield) == ios::hex)
  35348. +    base = 16;
  35349. +    else if ((stream.flags() & ios::basefield) == ios::oct)
  35350. +    base = 8;
  35351. +    val = 0;
  35352. +    for (;;) {
  35353. +    if (ch == EOF)
  35354. +        break;
  35355. +    int digit;
  35356. +    if (ch >= '0' && ch <= '9')
  35357. +        digit = ch - '0';
  35358. +    else if (ch >= 'A' && ch <= 'F')
  35359. +        digit = ch - 'A' + 10;
  35360. +    else if (ch >= 'a' && ch <= 'f')
  35361. +        digit = ch - 'a' + 10;
  35362. +    else
  35363. +        digit = 999;
  35364. +    if (digit >= base) {
  35365. +        sb->sputbackc(ch);
  35366. +        if (ndigits == 0)
  35367. +        goto fail;
  35368. +        else
  35369. +        goto unlock;
  35370. +    }
  35371. +    ndigits++;
  35372. +    val = base * val + digit;
  35373. +    ch = sb->sbumpc();
  35374. +    }
  35375. +  unlock:
  35376. +    retval = 1;
  35377. +    goto out;
  35378. +  fail:
  35379. +    stream.set(ios::failbit);
  35380. +    retval = 0;
  35381. +    goto out;
  35382. +  eof_fail:
  35383. +    stream.set(ios::failbit|ios::eofbit);
  35384. +    retval = 0;
  35385. +  out:
  35386. +    stream.isfx();
  35387. +    _IO_cleanup_region_end (0);
  35388. +    return retval;
  35389. +}
  35390. +
  35391. +#define READ_INT(TYPE) \
  35392. +istream& istream::operator>>(TYPE& i)\
  35393. +{\
  35394. +    unsigned LONGEST val; int neg;\
  35395. +    if (read_int(*this, val, neg)) {\
  35396. +    if (neg) val = -val;\
  35397. +    i = (TYPE)val;\
  35398. +    }\
  35399. +    return *this;\
  35400. +}
  35401. +
  35402. +READ_INT(short)
  35403. +READ_INT(unsigned short)
  35404. +READ_INT(int)
  35405. +READ_INT(unsigned int)
  35406. +READ_INT(long)
  35407. +READ_INT(unsigned long)
  35408. +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
  35409. +READ_INT(long long)
  35410. +READ_INT(unsigned long long)
  35411. +#endif
  35412. +#if _G_HAVE_BOOL
  35413. +READ_INT(bool)
  35414. +#endif
  35415. +
  35416. +istream& istream::operator>>(long double& x)
  35417. +{
  35418. +    if (ipfx0())
  35419. +      {
  35420. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35421. +                  _strbuf);
  35422. +#if _G_HAVE_LONG_DOUBLE_IO
  35423. +    scan("%Lg", &x);
  35424. +#else
  35425. +    double y;
  35426. +    scan("%lg", &y);
  35427. +    x = y;
  35428. +#endif
  35429. +    isfx();
  35430. +    _IO_cleanup_region_end (0);
  35431. +      }
  35432. +    return *this;
  35433. +}
  35434. +
  35435. +istream& istream::operator>>(double& x)
  35436. +{
  35437. +    if (ipfx0())
  35438. +      {
  35439. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35440. +                  _strbuf);
  35441. +    scan("%lg", &x);
  35442. +    isfx();
  35443. +    _IO_cleanup_region_end (0);
  35444. +      }
  35445. +    return *this;
  35446. +}
  35447. +
  35448. +istream& istream::operator>>(float& x)
  35449. +{
  35450. +    if (ipfx0())
  35451. +      {
  35452. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35453. +                  _strbuf);
  35454. +    scan("%g", &x);
  35455. +    isfx();
  35456. +    _IO_cleanup_region_end (0);
  35457. +      }
  35458. +    return *this;
  35459. +}
  35460. +
  35461. +istream& istream::operator>>(register streambuf* sbuf)
  35462. +{
  35463. +    if (ipfx0()) {
  35464. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35465. +                  _strbuf);
  35466. +    register streambuf* inbuf = rdbuf();
  35467. +    // FIXME: Should optimize!
  35468. +    for (;;) {
  35469. +        register int ch = inbuf->sbumpc();
  35470. +        if (ch == EOF) {
  35471. +        set(ios::eofbit);
  35472. +        break;
  35473. +        }
  35474. +        if (sbuf->sputc(ch) == EOF) {
  35475. +        set(ios::failbit);
  35476. +        break;
  35477. +        }
  35478. +    }
  35479. +    isfx();
  35480. +    _IO_cleanup_region_end (0);
  35481. +    }
  35482. +    return *this;
  35483. +}
  35484. +
  35485. +ostream& ostream::operator<<(char c)
  35486. +{
  35487. +    if (opfx()) {
  35488. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35489. +                  _strbuf);
  35490. +#if 1
  35491. +    // This is what the cfront implementation does.
  35492. +    if (_strbuf->sputc(c) == EOF) {
  35493. +        set(ios::badbit);
  35494. +        goto failed;
  35495. +    }
  35496. +#else
  35497. +    // This is what cfront documentation and current ANSI drafts say.
  35498. +    int w = width(0);
  35499. +    char fill_char = fill();
  35500. +    register int padding = w > 0 ? w - 1 : 0;
  35501. +    register streambuf *sb = _strbuf;
  35502. +    if (!(flags() & ios::left) && padding) // Default adjustment.
  35503. +        if (_IO_padn(sb, fill_char, padding) < padding) {
  35504. +          set(ios::badbit);
  35505. +          goto failed;
  35506. +        }
  35507. +    if (sb->sputc(c) == EOF) {
  35508. +      set(ios::badbit);
  35509. +      goto failed;
  35510. +        }
  35511. +    if (flags() & ios::left && padding) // Left adjustment.
  35512. +        if (_IO_padn(sb, fill_char, padding) < padding)
  35513. +          set(ios::badbit);
  35514. +#endif
  35515. +       failed:
  35516. +    osfx();
  35517. +    _IO_cleanup_region_end (0);
  35518. +    }
  35519. +    return *this;
  35520. +}
  35521. +
  35522. +/* Write VAL on STREAM.
  35523. +   If SIGN<0, val is the absolute value of a negative number.
  35524. +   If SIGN>0, val is a signed non-negative number.
  35525. +   If SIGN==0, val is unsigned. */
  35526. +
  35527. +static void write_int(ostream& stream, unsigned LONGEST val, int sign)
  35528. +{
  35529. +#define WRITE_BUF_SIZE (10 + sizeof(unsigned LONGEST) * 3)
  35530. +    char buf[WRITE_BUF_SIZE];
  35531. +    register char *buf_ptr = buf+WRITE_BUF_SIZE; // End of buf.
  35532. +    const char *show_base = "";
  35533. +    int show_base_len = 0;
  35534. +    int show_pos = 0; // If 1, print a '+'.
  35535. +
  35536. +    // Now do the actual conversion, placing the result at the *end* of buf.
  35537. +    // Note that we use separate code for decimal, octal, and hex,
  35538. +    // so we can divide by optimizable constants.
  35539. +    if ((stream.flags() & ios::basefield) == ios::oct) { // Octal
  35540. +    do {
  35541. +        *--buf_ptr = (val & 7) + '0';
  35542. +        val = val >> 3;
  35543. +    } while (val != 0);
  35544. +    if ((stream.flags() & ios::showbase) && (*buf_ptr != '0'))
  35545. +        *--buf_ptr = '0';
  35546. +    }
  35547. +    else if ((stream.flags() & ios::basefield) == ios::hex) { // Hex
  35548. +    const char *xdigs = (stream.flags() & ios::uppercase) ? "0123456789ABCDEF0X"
  35549. +        : "0123456789abcdef0x";
  35550. +    do {
  35551. +        *--buf_ptr = xdigs[val & 15];
  35552. +        val = val >> 4;
  35553. +    } while (val != 0);
  35554. +    if ((stream.flags() & ios::showbase)) {
  35555. +        show_base = xdigs + 16; // Either "0X" or "0x".
  35556. +        show_base_len = 2;
  35557. +    }
  35558. +    }
  35559. +    else { // Decimal
  35560. +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
  35561. +    // Optimization:  Only use long long when we need to.
  35562. +    while (val > UINT_MAX) {
  35563. +        *--buf_ptr = (val % 10) + '0';
  35564. +        val /= 10;
  35565. +    }
  35566. +    // Use more efficient (int) arithmetic for the rest.
  35567. +    register unsigned int ival = (unsigned int)val;
  35568. +#else
  35569. +    register unsigned LONGEST ival = val;
  35570. +#endif
  35571. +    do {
  35572. +        *--buf_ptr = (ival % 10) + '0';
  35573. +        ival /= 10;
  35574. +    } while (ival != 0);
  35575. +    if (sign > 0 && (stream.flags() & ios::showpos))
  35576. +        show_pos=1;
  35577. +    }
  35578. +
  35579. +    int buf_len = buf+WRITE_BUF_SIZE - buf_ptr;
  35580. +    int w = stream.width(0);
  35581. +
  35582. +    // Calculate padding.
  35583. +    int len = buf_len+show_pos;
  35584. +    if (sign < 0) len++;
  35585. +    len += show_base_len;
  35586. +    int padding = len > w ? 0 : w - len;
  35587. +
  35588. +    // Do actual output.
  35589. +    register streambuf* sbuf = stream.rdbuf();
  35590. +    ios::fmtflags pad_kind =
  35591. +    stream.flags() & (ios::left|ios::right|ios::internal);
  35592. +    char fill_char = stream.fill();
  35593. +    if (padding > 0
  35594. +    && pad_kind != (ios::fmtflags)ios::left
  35595. +    && pad_kind != (ios::fmtflags)ios::internal) // Default (right) adjust.
  35596. +    if (_IO_padn(sbuf, fill_char, padding) < padding)
  35597. +      goto failed;
  35598. +    if (sign < 0 || show_pos)
  35599. +      {
  35600. +    char ch = sign < 0 ? '-' : '+';
  35601. +    if (sbuf->sputc(ch) < 0)
  35602. +      goto failed;
  35603. +      }
  35604. +    if (show_base_len)
  35605. +    if (_IO_sputn(sbuf, show_base, show_base_len) <= 0)
  35606. +      goto failed;
  35607. +    if (pad_kind == (ios::fmtflags)ios::internal && padding > 0)
  35608. +      if (_IO_padn(sbuf, fill_char, padding) < padding)
  35609. +    goto failed;
  35610. +    if (_IO_sputn (sbuf, buf_ptr, buf_len) != buf_len)
  35611. +      goto failed;
  35612. +    if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
  35613. +      if (_IO_padn(sbuf, fill_char, padding) < padding)
  35614. +    goto failed;
  35615. +    stream.osfx();
  35616. +    return;
  35617. +  failed:
  35618. +    stream.set(ios::badbit);
  35619. +    stream.osfx();
  35620. +}
  35621. +
  35622. +ostream& ostream::operator<<(int n)
  35623. +{
  35624. +    if (opfx()) {
  35625. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35626. +                  _strbuf);
  35627. +    int sign = 1;
  35628. +    unsigned int abs_n = (unsigned)n;
  35629. +    if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
  35630. +        abs_n = -((unsigned)n), sign = -1;
  35631. +    write_int(*this, abs_n, sign);
  35632. +    _IO_cleanup_region_end (0);
  35633. +    }
  35634. +    return *this;
  35635. +}
  35636. +
  35637. +ostream& ostream::operator<<(unsigned int n)
  35638. +{
  35639. +    if (opfx()) {
  35640. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35641. +                  _strbuf);
  35642. +    write_int(*this, n, 0);
  35643. +    _IO_cleanup_region_end (0);
  35644. +    }
  35645. +    return *this;
  35646. +}
  35647. +
  35648. +
  35649. +ostream& ostream::operator<<(long n)
  35650. +{
  35651. +    if (opfx()) {
  35652. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35653. +                  _strbuf);
  35654. +    int sign = 1;
  35655. +    unsigned long abs_n = (unsigned long)n;
  35656. +    if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
  35657. +        abs_n = -((unsigned long)n), sign = -1;
  35658. +    write_int(*this, abs_n, sign);
  35659. +    _IO_cleanup_region_end (0);
  35660. +    }
  35661. +    return *this;
  35662. +}
  35663. +
  35664. +ostream& ostream::operator<<(unsigned long n)
  35665. +{
  35666. +    if (opfx()) {
  35667. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35668. +                  _strbuf);
  35669. +    write_int(*this, n, 0);
  35670. +    _IO_cleanup_region_end (0);
  35671. +    }
  35672. +    return *this;
  35673. +}
  35674. +
  35675. +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
  35676. +ostream& ostream::operator<<(long long n)
  35677. +{
  35678. +    if (opfx()) {
  35679. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35680. +                  _strbuf);
  35681. +    int sign = 1;
  35682. +    unsigned long long abs_n = (unsigned long long)n;
  35683. +    if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
  35684. +        abs_n = -((unsigned long long)n), sign = -1;
  35685. +    write_int(*this, abs_n, sign);
  35686. +    _IO_cleanup_region_end (0);
  35687. +    }
  35688. +    return *this;
  35689. +}
  35690. +
  35691. +
  35692. +ostream& ostream::operator<<(unsigned long long n)
  35693. +{
  35694. +    if (opfx()) {
  35695. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35696. +                  _strbuf);
  35697. +    write_int(*this, n, 0);
  35698. +    _IO_cleanup_region_end (0);
  35699. +    }
  35700. +    return *this;
  35701. +}
  35702. +#endif /*__GNUC__*/
  35703. +
  35704. +ostream& ostream::operator<<(double n)
  35705. +{
  35706. +    if (opfx()) {
  35707. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35708. +                  _strbuf);
  35709. +    // Uses __cvt_double (renamed from static cvt), in Chris Torek's
  35710. +    // stdio implementation.  The setup code uses the same logic
  35711. +    // as in __vsbprintf.C (also based on Torek's code).
  35712. +    int format_char;
  35713. +    if ((flags() & ios::floatfield) == ios::fixed)
  35714. +        format_char = 'f';
  35715. +    else if ((flags() & ios::floatfield) == ios::scientific)
  35716. +        format_char = flags() & ios::uppercase ? 'E' : 'e';
  35717. +    else
  35718. +        format_char = flags() & ios::uppercase ? 'G' : 'g';
  35719. +
  35720. +    int prec = precision();
  35721. +    if (prec <= 0 && !(flags() & ios::fixed))
  35722. +      prec = 6; /* default */
  35723. +
  35724. +    // Do actual conversion.
  35725. +#if _G_HAVE_PRINTF_FP
  35726. +    {
  35727. +      struct printf_info info = { /* prec: */ prec,
  35728. +                      /* width: */ width(0),
  35729. +                      /* spec: */ format_char,
  35730. +                      /* is_long_double: */ 0,
  35731. +                      /* is_short: */ 0,
  35732. +                      /* is_long: */ 0,
  35733. +                      /* alt: */ (flags() & ios::showpoint) != 0,
  35734. +                      /* space: */ 0,
  35735. +                      /* left: */ (flags() & ios::left) != 0,
  35736. +                      /* showsign: */ (flags() & ios::showpos) != 0,
  35737. +                      /* group: */ 0,
  35738. +#if defined __GLIBC__ && __GLIBC__ >= 2
  35739. +                      /* extra: */ 0,
  35740. +#if __GLIBC_MINOR__ >= 1
  35741. +                      /* is_char: */ 0,
  35742. +#if __GLIBC_MINOR__ >= 2
  35743. +                      /* wide: */ 0,
  35744. +                      /* i18n: */ 0,
  35745. +#endif
  35746. +#endif
  35747. +#endif
  35748. +                      /* pad: */ fill()
  35749. +      };
  35750. +      const void *ptr = (const void *) &n;
  35751. +      if (__printf_fp (rdbuf(), &info, &ptr) < 0)
  35752. +        set(ios::badbit|ios::failbit);
  35753. +    }
  35754. +#elif defined  _IO_USE_DTOA
  35755. +    if (_IO_outfloat(n, rdbuf(), format_char, width(0),
  35756. +             prec, flags(),
  35757. +             flags() & ios::showpos ? '+' : 0,
  35758. +             fill()) < 0)
  35759. +        set(ios::badbit|ios::failbit); // ??
  35760. +#else
  35761. +    int fpprec = 0; // 'Extra' (suppressed) floating precision.
  35762. +    if (prec > MAXFRACT) {
  35763. +        if (flags() & (ios::fixed|ios::scientific) & ios::showpos)
  35764. +        fpprec = prec - MAXFRACT;
  35765. +        prec = MAXFRACT;
  35766. +    }
  35767. +    int negative;
  35768. +    char buf[BUF];
  35769. +    int sign = '\0';
  35770. +    char *cp = buf;
  35771. +    *cp = 0;
  35772. +    int size = __cvt_double(n, prec,
  35773. +                flags() & ios::showpoint ? 0x80 : 0,
  35774. +                &negative,
  35775. +                format_char, cp, buf + sizeof(buf));
  35776. +    if (negative) sign = '-';
  35777. +    else if (flags() & ios::showpos) sign = '+';
  35778. +    if (*cp == 0)
  35779. +        cp++;
  35780. +
  35781. +    // Calculate padding.
  35782. +    int fieldsize = size + fpprec;
  35783. +    if (sign) fieldsize++;
  35784. +    int padding = 0;
  35785. +    int w = width(0);
  35786. +    if (fieldsize < w)
  35787. +        padding = w - fieldsize;
  35788. +
  35789. +    // Do actual output.
  35790. +    register streambuf* sbuf = rdbuf();
  35791. +    register i;
  35792. +    char fill_char = fill();
  35793. +    ios::fmtflags pad_kind =
  35794. +        flags() & (ios::left|ios::right|ios::internal);
  35795. +    if (pad_kind != (ios::fmtflags)ios::left // Default (right) adjust.
  35796. +        && pad_kind != (ios::fmtflags)ios::internal)
  35797. +        for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
  35798. +    if (sign)
  35799. +        sbuf->sputc(sign);
  35800. +    if (pad_kind == (ios::fmtflags)ios::internal)
  35801. +        for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
  35802. +
  35803. +    // Emit the actual concented field, followed by extra zeros.
  35804. +    _IO_sputn (sbuf, cp, size);
  35805. +    for (i = fpprec; --i >= 0; ) sbuf->sputc('0');
  35806. +
  35807. +    if (pad_kind == (ios::fmtflags)ios::left) // Left adjustment
  35808. +        for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
  35809. +#endif
  35810. +    osfx();
  35811. +    _IO_cleanup_region_end (0);
  35812. +    }
  35813. +    return *this;
  35814. +}
  35815. +
  35816. +#if _G_HAVE_LONG_DOUBLE_IO
  35817. +ostream& ostream::operator<<(long double n)
  35818. +{
  35819. +  if (opfx())
  35820. +    {
  35821. +      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35822. +                _strbuf);
  35823. +      int format_char;
  35824. +      if ((flags() & ios::floatfield) == ios::fixed)
  35825. +    format_char = 'f';
  35826. +      else if ((flags() & ios::floatfield) == ios::scientific)
  35827. +    format_char = flags() & ios::uppercase ? 'E' : 'e';
  35828. +      else
  35829. +    format_char = flags() & ios::uppercase ? 'G' : 'g';
  35830. +
  35831. +      int prec = precision();
  35832. +      if (prec <= 0 && !(flags() & ios::fixed))
  35833. +    prec = 6; /* default */
  35834. +
  35835. +#if _G_HAVE_PRINTF_FP
  35836. +      // Do actual conversion.
  35837. +      struct printf_info info = { /* prec: */ prec,
  35838. +                  /* width: */ width(0),
  35839. +                  /* spec: */ format_char,
  35840. +                      /* is_long_double: */ 1,
  35841. +                  /* is_short: */ 0,
  35842. +                  /* is_long: */ 0,
  35843. +                  /* alt: */ (flags() & ios::showpoint) != 0,
  35844. +                  /* space: */ 0,
  35845. +                  /* left: */ (flags() & ios::left) != 0,
  35846. +                  /* showsign: */ (flags() & ios::showpos) != 0,
  35847. +                  /* group: */ 0,
  35848. +#if defined __GLIBC__ && __GLIBC__ >= 2
  35849. +                  /* extra: */ 0,
  35850. +#if __GLIBC_MINOR__ >= 1
  35851. +                  /* is_char: */ 0,
  35852. +#if __GLIBC_MINOR__ >= 2
  35853. +                  /* wide: */ 0,
  35854. +                  /* i18n: */ 0,
  35855. +#endif
  35856. +#endif
  35857. +#endif
  35858. +                  /* pad: */ fill()
  35859. +      };
  35860. +
  35861. +      const void *ptr = (const void *) &n;
  35862. +
  35863. +      if (__printf_fp (rdbuf(), &info, &ptr) < 0)
  35864. +    set (ios::badbit|ios::failbit);
  35865. +#else
  35866. +# error "long double I/O using dtoa or cvt_double is not implemented"
  35867. +#endif
  35868. +      osfx();
  35869. +      _IO_cleanup_region_end (0);
  35870. +    }
  35871. +  return *this;
  35872. +}
  35873. +#endif
  35874. +
  35875. +ostream& ostream::operator<<(const char *s)
  35876. +{
  35877. +  if (opfx())
  35878. +    {
  35879. +      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35880. +                _strbuf);
  35881. +      if (s == NULL)
  35882. +    s = "(null)";
  35883. +      int len = strlen(s);
  35884. +      int w = width(0);
  35885. +// FIXME: Should we: if (w && len>w) len = w;
  35886. +      char fill_char = fill();
  35887. +      register streambuf *sbuf = rdbuf();
  35888. +      register int padding = w > len ? w - len : 0;
  35889. +      if (!(flags() & ios::left) && padding > 0) // Default adjustment.
  35890. +    if (_IO_padn(sbuf, fill_char, padding) != padding)
  35891. +      {
  35892. +        set(ios::badbit);
  35893. +        goto failed;
  35894. +      }
  35895. +      if (_IO_sputn (sbuf, s, len) != len)
  35896. +    {
  35897. +      set(ios::badbit);
  35898. +      goto failed;
  35899. +    }
  35900. +      if (flags() & ios::left && padding > 0) // Left adjustment.
  35901. +    if (_IO_padn(sbuf, fill_char, padding) != padding)
  35902. +      set(ios::badbit);
  35903. +     failed:
  35904. +      osfx();
  35905. +      _IO_cleanup_region_end (0);
  35906. +    }
  35907. +  return *this;
  35908. +}
  35909. +
  35910. +#if 0
  35911. +ostream& ostream::operator<<(const void *p)
  35912. +{ Is in osform.cc, to avoid pulling in all of _IO_vfprintf by this file. */ }
  35913. +#endif
  35914. +
  35915. +ostream& ostream::operator<<(register streambuf* sbuf)
  35916. +{
  35917. +  if (opfx())
  35918. +    {
  35919. +      _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35920. +                _strbuf);
  35921. +      char buffer[_IO_BUFSIZ];
  35922. +      register streambuf* outbuf = _strbuf;
  35923. +      for (;;)
  35924. +    {
  35925. +      _IO_size_t count = _IO_sgetn(sbuf, buffer, _IO_BUFSIZ);
  35926. +      if (count <= 0)
  35927. +        break;
  35928. +      if (_IO_sputn(outbuf, buffer, count) != count)
  35929. +        {
  35930. +          set(ios::badbit);
  35931. +          break;
  35932. +        }
  35933. +    }
  35934. +      osfx();
  35935. +      _IO_cleanup_region_end (0);
  35936. +    }
  35937. +  return *this;
  35938. +}
  35939. +
  35940. +ostream::ostream(streambuf* sb, ostream* tied)
  35941. +{
  35942. +  init (sb, tied);
  35943. +}
  35944. +
  35945. +ostream& ostream::seekp(streampos pos)
  35946. +{
  35947. +    pos = _strbuf->pubseekpos(pos, ios::out);
  35948. +    if (pos == streampos(EOF))
  35949. +    set(ios::badbit);
  35950. +    return *this;
  35951. +}
  35952. +
  35953. +ostream& ostream::seekp(streamoff off, _seek_dir dir)
  35954. +{
  35955. +  streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_OUTPUT);
  35956. +  if (pos == streampos(EOF))
  35957. +    set(ios::badbit);
  35958. +  return *this;
  35959. +}
  35960. +
  35961. +streampos ostream::tellp()
  35962. +{
  35963. +#if 1
  35964. +    streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_OUTPUT);
  35965. +#else
  35966. +    streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::out);
  35967. +#endif
  35968. +    if (pos == streampos(EOF))
  35969. +    set(ios::badbit);
  35970. +    return pos;
  35971. +}
  35972. +
  35973. +ostream& ostream::flush()
  35974. +{
  35975. +    if (_strbuf->sync())
  35976. +    set(ios::badbit);
  35977. +    return *this;
  35978. +}
  35979. +
  35980. +ostream& flush(ostream& outs)
  35981. +{
  35982. +  return outs.flush();
  35983. +}
  35984. +
  35985. +istream& ws(istream& ins)
  35986. +{
  35987. +    if (ins.ipfx1()) {
  35988. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  35989. +                  ins._strbuf);
  35990. +    int ch = skip_ws(ins._strbuf);
  35991. +    if (ch == EOF)
  35992. +        ins.set(ios::eofbit);
  35993. +    else
  35994. +        ins._strbuf->sputbackc(ch);
  35995. +    ins.isfx();
  35996. +    _IO_cleanup_region_end (0);
  35997. +    }
  35998. +    return ins;
  35999. +}
  36000. +
  36001. +// Skip white-space.  Return 0 on failure (EOF), or 1 on success.
  36002. +// Differs from ws() manipulator in that failbit is set on EOF.
  36003. +// Called by ipfx() and ipfx0() if needed.
  36004. +
  36005. +int istream::_skip_ws()
  36006. +{
  36007. +    int ch = skip_ws(_strbuf);
  36008. +    if (ch == EOF) {
  36009. +    set(ios::eofbit|ios::failbit);
  36010. +    return 0;
  36011. +    }
  36012. +    else {
  36013. +    _strbuf->sputbackc(ch);
  36014. +    return 1;
  36015. +    }
  36016. +}
  36017. +
  36018. +ostream& ends(ostream& outs)
  36019. +{
  36020. +    outs.put('\0');
  36021. +    return outs;
  36022. +}
  36023. +
  36024. +ostream& endl(ostream& outs)
  36025. +{
  36026. +    return flush(outs.put('\n'));
  36027. +}
  36028. +
  36029. +istream& lock(istream& ins)
  36030. +{
  36031. +  _IO_flockfile (ins._strbuf);
  36032. +  return ins;
  36033. +}
  36034. +istream& unlock(istream& ins)
  36035. +{
  36036. +  _IO_funlockfile (ins._strbuf);
  36037. +  return ins;
  36038. +}
  36039. +ostream& lock(ostream& outs)
  36040. +{
  36041. +  _IO_flockfile (outs._strbuf);
  36042. +  return outs;
  36043. +}
  36044. +ostream& unlock(ostream& outs)
  36045. +{
  36046. +  _IO_funlockfile (outs._strbuf);
  36047. +  return outs;
  36048. +}
  36049. +
  36050. +
  36051. +ostream& ostream::write(const char *s, streamsize n)
  36052. +{
  36053. +    if (opfx()) {
  36054. +    _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
  36055. +                  _strbuf);
  36056. +    if (_IO_sputn(_strbuf, s, n) != n)
  36057. +        set(ios::failbit);
  36058. +    osfx();
  36059. +    _IO_cleanup_region_end (0);
  36060. +    }
  36061. +    return *this;
  36062. +}
  36063. +
  36064. +void ostream::do_osfx()
  36065. +{
  36066. +    if (flags() & ios::unitbuf)
  36067. +    flush();
  36068. +    if (flags() & ios::stdio) {
  36069. +    fflush(stdout);
  36070. +    fflush(stderr);
  36071. +    }
  36072. +}
  36073. +
  36074. +iostream::iostream(streambuf* sb, ostream* tied)
  36075. +{
  36076. +  init (sb, tied);
  36077. +}
  36078. +
  36079. +// NOTE: extension for compatibility with old libg++.
  36080. +// Not really compatible with fistream::close().
  36081. +#ifdef _STREAM_COMPAT
  36082. +void ios::close()
  36083. +{
  36084. +  if (_strbuf->_flags & _IO_IS_FILEBUF)
  36085. +    ((struct filebuf*)rdbuf())->close();
  36086. +  else if (_strbuf != NULL)
  36087. +    rdbuf()->sync();
  36088. +  _strbuf = NULL;
  36089. +  _state = badbit;
  36090. +}
  36091. +
  36092. +int istream::skip(int i)
  36093. +{
  36094. +    int old = (_flags & ios::skipws) != 0;
  36095. +    if (i)
  36096. +    _flags |= ios::skipws;
  36097. +    else
  36098. +    _flags &= ~ios::skipws;
  36099. +    return old;
  36100. +}
  36101. +#endif
  36102. diff -urNEBb gcc-2.95.3-orig/libio/fileops.c gcc-2.95.3/libio/fileops.c
  36103. --- gcc-2.95.3-orig/libio/fileops.c    1999-04-12 20:27:49.000000000 +0200
  36104. +++ gcc-2.95.3/libio/fileops.c    2003-12-02 17:50:55.000000000 +0100
  36105. @@ -419,7 +419,7 @@
  36106.    return retval;
  36107.  }
  36108.  
  36109. -_IO_pos_t
  36110. +_IO_off_t
  36111.  _IO_file_seekoff (fp, offset, dir, mode)
  36112.       _IO_FILE *fp;
  36113.       _IO_off_t offset;
  36114. @@ -587,7 +587,7 @@
  36115.    return read (fp->_fileno, buf, size);
  36116.  }
  36117.  
  36118. -_IO_pos_t
  36119. +_IO_off_t
  36120.  _IO_file_seek (fp, offset, dir)
  36121.       _IO_FILE *fp;
  36122.       _IO_off_t offset;
  36123. diff -urNEBb gcc-2.95.3-orig/libio/gen-params gcc-2.95.3/libio/gen-params
  36124. --- gcc-2.95.3-orig/libio/gen-params    1999-03-24 00:58:21.000000000 +0100
  36125. +++ gcc-2.95.3/libio/gen-params    2003-12-02 17:50:55.000000000 +0100
  36126. @@ -709,20 +709,20 @@
  36127.  fi
  36128.  
  36129.  # A little test program to check if __printf_fp is available.
  36130. -cat >dummy.c <<EOF
  36131. -int main()
  36132. -{
  36133. -    return __printf_fp ();
  36134. -}
  36135. -EOF
  36136. -
  36137. -if ${CC} dummy.c >/dev/null 2>&1 ; then
  36138. -  echo "#define ${macro_prefix}HAVE_PRINTF_FP 1"
  36139. -  echo "#define ${macro_prefix}HAVE_LONG_DOUBLE_IO 1"
  36140. -else
  36141. +# cat >dummy.c <<EOF
  36142. +# int main()
  36143. +# {
  36144. +#     return __printf_fp ();
  36145. +# }
  36146. +# EOF
  36147. +
  36148. +#if ${CC} dummy.c >/dev/null 2>&1 ; then
  36149. +#  echo "#define ${macro_prefix}HAVE_PRINTF_FP 1"
  36150. +#  echo "#define ${macro_prefix}HAVE_LONG_DOUBLE_IO 1"
  36151. +#else
  36152.    echo "#define ${macro_prefix}HAVE_PRINTF_FP 0"
  36153.    echo "#define ${macro_prefix}HAVE_LONG_DOUBLE_IO 0"
  36154. -fi
  36155. +#fi
  36156.  
  36157.  # Uncomment the following line if you don't have working templates.
  36158.  # echo "#define ${macro_prefix}NO_TEMPLATES"
  36159. diff -urNEBb gcc-2.95.3-orig/libio/genops.c gcc-2.95.3/libio/genops.c
  36160. --- gcc-2.95.3-orig/libio/genops.c    1999-03-05 01:19:08.000000000 +0100
  36161. +++ gcc-2.95.3/libio/genops.c    2003-12-02 17:50:55.000000000 +0100
  36162. @@ -467,10 +467,10 @@
  36163.      return fp;
  36164.  }
  36165.  
  36166. -_IO_pos_t
  36167. +_IO_off_t
  36168.  _IO_default_seekpos (fp, pos, mode)
  36169.       _IO_FILE *fp;
  36170. -     _IO_pos_t pos;
  36171. +     _IO_off_t pos;
  36172.       int mode;
  36173.  {
  36174.    return _IO_SEEKOFF (fp, _IO_pos_as_off (pos), 0, mode);
  36175. @@ -551,7 +551,7 @@
  36176.    _IO_un_link (fp);
  36177.  }
  36178.  
  36179. -_IO_pos_t
  36180. +_IO_off_t
  36181.  _IO_default_seekoff (fp, offset, dir, mode)
  36182.       _IO_FILE *fp;
  36183.       _IO_off_t offset;
  36184. @@ -882,7 +882,7 @@
  36185.    return (unsigned char) *fp->_IO_read_ptr;
  36186.  }
  36187.  
  36188. -_IO_pos_t
  36189. +_IO_off_t
  36190.  _IO_default_seek (fp, offset, dir)
  36191.       _IO_FILE *fp;
  36192.       _IO_off_t offset;
  36193. diff -urNEBb gcc-2.95.3-orig/libio/ioseekoff.c gcc-2.95.3/libio/ioseekoff.c
  36194. --- gcc-2.95.3-orig/libio/ioseekoff.c    1997-09-16 18:00:21.000000000 +0200
  36195. +++ gcc-2.95.3/libio/ioseekoff.c    2003-12-02 17:50:55.000000000 +0100
  36196. @@ -25,7 +25,7 @@
  36197.  
  36198.  #include <libioP.h>
  36199.  
  36200. -_IO_pos_t
  36201. +_IO_off_t
  36202.  _IO_seekoff (fp, offset, dir, mode)
  36203.       _IO_FILE *fp;
  36204.       _IO_off_t offset;
  36205. diff -urNEBb gcc-2.95.3-orig/libio/ioseekpos.c gcc-2.95.3/libio/ioseekpos.c
  36206. --- gcc-2.95.3-orig/libio/ioseekpos.c    1997-09-16 18:00:23.000000000 +0200
  36207. +++ gcc-2.95.3/libio/ioseekpos.c    2003-12-02 17:50:55.000000000 +0100
  36208. @@ -25,10 +25,10 @@
  36209.  
  36210.  #include <libioP.h>
  36211.  
  36212. -_IO_pos_t
  36213. +_IO_off_t
  36214.  _IO_seekpos (fp, pos, mode)
  36215.       _IO_FILE *fp;
  36216. -     _IO_pos_t pos;
  36217. +     _IO_off_t pos;
  36218.       int mode;
  36219.  {
  36220.    _IO_pos_t retval;
  36221. diff -urNEBb gcc-2.95.3-orig/libio/strops.c gcc-2.95.3/libio/strops.c
  36222. --- gcc-2.95.3-orig/libio/strops.c    1998-05-22 22:40:02.000000000 +0200
  36223. +++ gcc-2.95.3/libio/strops.c    2003-12-02 17:50:55.000000000 +0100
  36224. @@ -205,7 +205,7 @@
  36225.        - fp->_IO_read_base);
  36226.  }
  36227.  
  36228. -_IO_pos_t
  36229. +_IO_off_t
  36230.  _IO_str_seekoff (fp, offset, dir, mode)
  36231.       _IO_FILE *fp;
  36232.       _IO_off_t offset;
  36233. diff -urNEBb gcc-2.95.3-orig/texinfo/intl/dcgettext.c gcc-2.95.3/texinfo/intl/dcgettext.c
  36234. --- gcc-2.95.3-orig/texinfo/intl/dcgettext.c    1998-03-24 20:41:04.000000000 +0100
  36235. +++ gcc-2.95.3/texinfo/intl/dcgettext.c    2003-12-02 17:50:55.000000000 +0100
  36236. @@ -86,6 +86,8 @@
  36237.  
  36238.  /* @@ end of prolog @@ */
  36239.  
  36240. +#undef getcwd
  36241. +
  36242.  #ifdef _LIBC
  36243.  /* Rename the non ANSI C functions.  This is required by the standard
  36244.     because some ANSI C functions will require linking with this object
  36245. diff -urNEBb gcc-2.95.3-orig/texinfo/makeinfo/makeinfo.c gcc-2.95.3/texinfo/makeinfo/makeinfo.c
  36246. --- gcc-2.95.3-orig/texinfo/makeinfo/makeinfo.c    1999-05-28 04:10:10.000000000 +0200
  36247. +++ gcc-2.95.3/texinfo/makeinfo/makeinfo.c    2003-12-02 17:50:56.000000000 +0100
  36248. @@ -1598,7 +1598,7 @@
  36249.            if (c)
  36250.              username[i - 1] = 0;
  36251.  
  36252. -          user_entry = getpwnam (username);
  36253. +          user_entry = 0; //getpwnam (username);
  36254.  
  36255.            if (!user_entry)
  36256.              return (xstrdup (filename));
  36257.